2010-11-17 54 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'); 
}