2014-06-09 120 views
0

我想要一類適用於具有屬性「狀態」的所有元素等於「已禁用」。我正在瀏覽具有「.overlay」和檢查狀態的每個元素,然後在屬性「state」爲「disabled」時追加類「disabledClass」。問題在於它在所有元素上應用「disabledClass」。我猜這與我在$(this).find(「。navElement」)。addClass(「disabledClass」)中使用$(this)有關。 ?應用類到元素具有屬性

HTML:

<div id="1" class="overlay" state="active"> 
    <div class="navElement"> 
     <p>About us</p> 
    </div> 
</div> 
<div id="2" class="overlay" state="disabled"> 
    <div class="navElement"> 
     <p>Our values</p> 
    </div> 
</div> 
<div id="3" class="overlay" state="disabled"> 
    <div class="navElement"> 
     <p>The founder</p> 
    </div> 
</div> 

JS

$(".overlay").click(function() { 
    $(".overlay").attr("state", "disabled"); 
    $(this).attr("state", "active"); 

    $(".overlay").each(function() { 
     if ($(".overlay").attr("state") == "disabled") { 
      $(this).find(".navElement").addClass("disabledClass"); 
     } 
    }); 

}); 
+3

狀態是不是一個有效的屬性,你應該使用data- *屬性,然後答案會改變 – adeneo

+1

@ adeneo在這種情況下,這不*真的*重要。 – VisioN

+1

@VisioN - 這就是爲什麼它是一個**註釋**,標記是無效的,改變標記可以改變答案,尤其是'data()'更常用於數據屬性。 – adeneo

回答

2

試試這個:

$(".overlay").click(function(){ 
     $(".overlay").attr("state", "disabled"); 
     $(this).attr("state", "active"); 

     $(".overlay").each(function(){ 
       if($(this).attr("state") == "disabled"){ //changed this 
       $(this).find(".navElement").addClass("disabledClass"); 
      } 
     }); 

    }); 
+3

你應該強調你已經將'if'條件改爲'$(this)。 ......',否則很難看出其中的差異。 – VisioN

2

很抱歉,但我真的不明白你的問題,例如,你想知道什麼。 ..

,不過也許這會有所幫助:
使用jQuery尋找與overlay類的所有DOM元素和屬性state設置爲disabled再追加類disabledClass到它的孩子,其中包含已該類navElement這個簡單的說法應該做的伎倆:

$(".overlay[state='disabled']").find(".navElement").addClass("disabledClass") 
相關問題