Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jqueryif和else语句都在执行_Javascript_Jquery_Html - Fatal编程技术网

Javascript jqueryif和else语句都在执行

Javascript jqueryif和else语句都在执行,javascript,jquery,html,Javascript,Jquery,Html,我有一个脚本,如果页面标题与标记的文本值匹配,它将向元素添加一个类。我的脚本中的else语句用于说明页面标题与导航项均不匹配,且活动链接被分配给Home菜单项(即导航栏中的第一个)的情况 我的菜单是这样的: <ul class='menu'> <li> <a href="#">Home</a> </li> <!-- Page title - My Cool Website --> <li>

我有一个脚本,如果页面标题与
标记的文本值匹配,它将向元素添加一个类。我的脚本中的else语句用于说明页面标题与导航项均不匹配,且活动链接被分配给
Home
菜单项(即导航栏中的第一个)的情况

我的菜单是这样的:

<ul class='menu'>
    <li> <a href="#">Home</a> </li>
    <!-- Page title - My Cool Website -->
    <li> <a href="#">About Us</a> </li>
    <!-- Page title - About Us -->
    // etc....
</ul>
if和else语句似乎正在执行,因此第一个和匹配的元素现在都添加了一个
active

我试过使用
stopPropagation()
在我的语句末尾返回false
,但没有成功


有谁能告诉我两人都在执行死刑的原因吗?我假设我没有优雅地跳过DOM,但是javascript有点生疏。

问题在于您的每个循环,假设您在第二个a中找到了匹配项,但每个循环仍在继续,因此第一个元素将再次获得类

$(document).ready(function () {
    var title = $(document).attr("title");
    var exists;
    $(".menu li a").each(function (e) {
        var a = $(this).text();
        exists = title.match(a);
        if (exists) {
            $(this).addClass("active");
            return false;
        }
    });
    if (!exists) {
        $(".menu li a").first().addClass("active");
    }
});

为每个项目重新初始化“exists”变量。这就是问题所在。请改用此代码:

    $(document).ready(function () {
    var title = $(document).attr("title");
    var exists = false;
    $(".menu li a").each(function (e) {
        var a = $(this).text();

         if(title.match(a))
         {
         exists = true;
         return false;
         }
       });
    if (exists) {
      $(this).addClass("active");
     } 
     else {
      $(".menu li a").first().addClass("active");
     }
});

问题背后的原因是您有多个锚点
s,如果在循环中添加这些条件,一些锚点或另一锚点将满足
if()
else

$(document).ready(function() {
    var exists = false;
    var title = $(document).attr("title");
    $(".menu li a").each(function(e) { 
        var a = $(this).text(); 
        exists = title.match(a);
        if(exists) {
            $(this).addClass("active"); 
                return false; //break if statement matches.            
        }
    });
    if(!exists){
        $(".menu li a").first().addClass("active");
    }
});
存在
应该在每个循环之外。在遍历元素后,即在循环外,您需要检查是否没有元素与
标题
匹配

$(document).ready(function() {
    var exists = false;
    var title = $(document).attr("title");
    $(".menu li a").each(function(e) { 
        var a = $(this).text(); 
        exists = title.match(a);
        if(exists) {
            $(this).addClass("active"); 
                return false; //break if statement matches.            
        }
    });
    if(!exists){
        $(".menu li a").first().addClass("active");
    }
});
试试这个:

$(文档).ready(函数(){
var title=$(document.attr(“title”);
$(“.menu li a”)。每个(函数(e){
var a=$(this.text();
var exists=标题匹配(a);
如果(存在){
$(此).addClass(“活动”);
} 
});
$(“.menu li:first child a”).addClass(“活动”)

});
您可以创建一个JSFIDLE问题,这是因为您有多个
s
。一些或另一个
a
将满足
if()
else
@Tushar脚本设计为使用
标记在多个页面上工作,因此我无法提供一个工作的JSFIDLE。我想您必须在
每个
函数之外声明
exist
变量感谢这位朋友,您帮助我思考了如何优雅地退出if语句条件:)正确答案!