jQuery parent()。addClass()不使用隐藏元素

时间:2011-12-05 09:50:38

标签: jquery jquery-selectors

我正在尝试使用

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控制台执行相同的代码。它工作正常。

我尝试创建一个方法来执行此操作,结果仍然相同。我不知道为什么我要面对这个问题的孩子。如果有人遇到类似的问题,请告诉我。

3 个答案:

答案 0 :(得分:5)

问题是因为您正在使用parent(),它只在当前元素的DOM树中找到一层,在您的情况下是li。您需要使用closest()代替它,它将遍历整个DOM,直到找到与提供的选择器匹配的第一个元素。

考虑到这一点,以下内容适合您:

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

答案 1 :(得分:0)

试试这个:

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

答案 2 :(得分:0)

试试这个:

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