2011-12-05 33 views
0

我想使用jQuery的父()addClass()不與隱藏要素工作

jQuery("#element-id").parent().addClass('some-class'); 

我有一個結構是這樣的:

<div class="tab-container user-dash-tabs"> 
    <div class="tabs1"> 
     <ul class="shadetabs" id="countrytabs"> 
      <li class="poll"><a id="pillow-pack" rel="country2" href="javascript:;" class="selected"></a></li> 
      <li class="bott"><a href="javascript:;" class="" id="bottles" rel="country1"></a></li> 
     </ul> 
     <div class="cl"></div> 
    </div> 
    <input type="hidden" class="input-search" value="123" id="lubepack" name="lubepack"> 
    <p></p> 
    <div class="cl"></div> 

    <div class="tabcontent tab-content" id="country1" style="display: none;"> 
     <ul class="left-tab"> 
      <li title="water based" class=" add"><a class=" tab-pic7" id="tab-pic7-b" title="water based" href="javascript:;">&nbsp;</a></li> 
      <li title="silicone based"><a class=" tab-pic8" id="tab-pic8-b" title="silicon based" href="javascript:;">&nbsp;</a></li> 
      <li title="arousal"><a class=" tab-pic9" id="tab-pic9-b" href="javascript:;">&nbsp;</a></li> 
      <li title="flavored"><a class=" tab-pic10" id="tab-pic10-b" href="javascript:;">&nbsp;</a></li> 
      <li title="organic"><a class=" tab-pic11" id="tab-pic11-b" href="javascript:;">&nbsp;</a></li> 
      <li title="desensitizing"><a class=" tab-pic12" id="tab-pic12-b" href="javascript:;">&nbsp;</a></li> 
      <div class="cl"></div> 
     </ul> 
     <div class="cl"></div> 
    </div> 
    <div class="tabcontent tab-content" id="country2" style="display: block;"> 
     <ul class="left-tab"> 
      <li class=" " title="water based"><a class=" tab-pic7" id="tab-pic7-p" title="water based" href="javascript:;">&nbsp;</a></li> 
      <li title="silicone based"><a class=" tab-pic8" id="tab-pic8-p" title="silicon based" href="javascript:;">&nbsp;</a></li> 
      <li title="arousal"><a class=" tab-pic9" id="tab-pic9-p" title="" href="javascript:;">&nbsp;</a></li> 
      <li title="flavored"><a id="tab-pic10-p" class=" tab-pic10" href="javascript:;">&nbsp;</a></li> 
      <li title="organic"><a id="tab-pic11-p" class=" tab-pic11" href="javascript:;">&nbsp;</a></li> 
      <li title="desensitizing"><a id="tab-pic12-p" class=" tab-pic12" href="javascript:;">&nbsp;</a></li> 
      <div class="cl"></div> 
     </ul> 
     <div class="cl"></div> 
    </div> 

    <script type="text/javascript"> 
     var countries=new ddtabcontent("countrytabs") 
     countries.setpersist(true) 
     countries.setselectedClassTarget("link") //"link" or "linkparent" 
     countries.init() 
    </script> 

    <div class="cl"></div> 
    <div class="search-box fl"><input type="text" id="name" class="input-search" name="name" value=""></div> 
    <div class="cl"></div> 
</div> 

正如你所看到的,一個div隱藏而另一個可見。

無論何時單擊鏈接,應將add一類應用於其父項。

j("#" + id + "-p").parent().addClass("add"); 
j("#" + id + "-b").parent().addClass("add"); 

但是,它只是將該類添加到隱藏的<li>。如果我從Firebug控制檯執行相同的代碼。它工作正常。

我試着創建一個方法來做到這一點,仍然是相同的結果。我不知道爲什麼我面臨這個問題的孩子。如果有人遇到類似問題,請告訴我。

+8

能否請您發表您的HTML中人類可讀的格式。我把我的R2單位留在家中。 –

+0

您可以使用http://jsfiddle.net/發佈示例 – Nenad

+4

今天早上我心情很好,所以我爲您設置了格式,但請您今後自己做。 –

回答

5

這個問題是因爲你使用的是parent(),它只從當前元素向上看DOM樹上的一級,在你的情況下它是li。您需要使用closest(),它將遍歷整個DOM直到找到與提供的選擇器匹配的第一個元素。

考慮到這一點,下面應該爲你工作:

j("#" + id + "-p").closest("DIV").addClass("add"); 
j("#" + id + "-b").closest("DIV").addClass("add"); 
+0

@ krister-andersson仍然是相同的結果,我做了'j(「#」+ id +「-p」)。closest(「LI」)。addClass(「add」);'因爲我需要應用類給李,但是,結果完全一樣。我在第一行後面添加了一個alert('');以檢查類是否實際應用,它正在應用,它正在申請一個moement,然後,** add **類將從可見元素中移除。 .. – Ravish

+0

所以顯然有一些其他的代碼(你沒有顯示),再次刪除類。請在jsfiddle.net或jsbin.com – devnull69

+0

ok顯示所有相關代碼或(更好)張貼一個簡約的例子,解決了我的問題,有一個點擊列表附加到'j('ul li')'在不同的js文件中用於不同的目的......之後@ krister-andersson soultion的工作方式就像魅力一樣...... – Ravish

0

試試這個:

j("#" + id + "-p").parents("DIV.tabcontent").addClass("add"); 
j("#" + id + "-b").parents("DIV.tabcontent").addClass("add"); 
0

試試這個:

$(document).ready(function() { 
     $("a[href='" + window.location.pathname + "']").parents(".hidden-ul").css("display", "block"); 
     $("a[href='" + window.location.pathname + "']").parent("li").addClass("select"); 
    });