2010-11-17 56 views
6

原帖: 为什么不这么简单的脚本工作?如果hasClass然后addClass父母

if ($('#navigation > ul > li > ul > li > a').hasClass('.active')) { 
    $(this).parent().parent().parent().addClass(".active"); 
} 

编辑:

这不会隐藏H1:

if ($('#content h1').hasClass('aktiv')) { 
    $(this).hide(); 
} 

只有这样才能:

if ($('#content h1').hasClass('aktiv')) { 
    $('#content h1').hide(); 
} 

为什么我不能使用(此)?

回答

24

该点不是类名的一部分。它仅用于CSS/jQuery选择器符号。试试这个:

if ($('#navigation a').hasClass('active')) { 
    $(this).parent().addClass('active'); 
} 

如果$(this)指锚,你必须将其更改为$('#navigation a')以及因为如果条件不具备的jQuery回调范围。

0

你可能想的条件更改为​​

此外,hasClassaddClass采取类名,没有选择。
因此,您不应该包含.

+0

我买了我的问题(这)...想知道为什么? – 2010-11-17 22:27:25

2

另外,您可以使用:

if ($('#navigation a').is(".active")) { 
    $(this).parent().addClass("active"); 
} 
+0

+ 1代表'is()',但是'addClass()'仍然需要删除这个点。 – BoltClock 2010-11-17 19:00:30

+0

啊好的地方,我会做出更改 – 2010-11-17 19:01:26

+0

啊..不知道那个点。看到我编辑的帖子。 – 2010-11-17 22:22:19

0

不能使用$(this)因为jQuery的不知道它的存在的。你似乎过于复杂的事情。你可以做$('#content h1.aktiv').hide()。没有理由去测试,看看这个班是否存在。

+0

我需要一个脚本,发现是否有类“.aktiv”的对象。如果找到了班级,父母的父母应该被授予同一班级。被编辑的部分,带有if-sentence,只是我st something的东西 - 一个bug,如果你喜欢,我只是想听你们的话。 – 2010-11-19 09:43:28

+1

你可以做$('#content h1.aktiv')。parent()。parent()。addClass('aktiv')不带条件。 – 2010-11-19 16:49:38

0

不起作用的原因是因为this在if语句中没有具体含义,所以您将不得不返回到定义范围级别(函数)this

例如:

$('#element1').click(function() { 
    console.log($(this).attr('id')); // logs "element1" 

    if ($('#element2').hasClass('class')) { 
     console.log($(this).attr('id')); // still logs "element1" 
    } 
}); 
0

如果有人使用WordPress,你可以使用类似:

if (jQuery('.dropdown-menu li').hasClass('active')) { 
    jQuery('.current-menu-parent').addClass('current-menu-item'); 
}