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语句条件:)正确答案!