【问题标题】:jQuery parent().addClass() not working with hidden elementsjQuery parent().addClass() 不适用于隐藏元素
【发布时间】:2012-01-13 02:03:47
【问题描述】:

我正在尝试使用

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");

但是,它只是将类添加到隐藏的&lt;li&gt;。如果我从 Firebug 控制台执行相同的代码。它工作正常。

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

【问题讨论】:

  • 您能否以人类可读的格式发布您的 HTML。我把我的 R2 装置留在家里了。
  • 您可以使用jsfiddle.net 发布示例
  • 我今天早上心情不错,所以我给你格式化了,但以后请你自己做。
  • @krister-andersson 谢谢你,当你的建议出现时,我正试图编辑帖子......
  • @krister-andersson,是的,是的……

标签: jquery jquery-selectors


【解决方案1】:

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

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

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

【讨论】:

  • @krister-andersson 仍然是相同的结果,我做了j("#" + id + "-p").closest("LI").addClass("add"); 因为我需要将类应用于 LI,但是结果完全相同。我在第一行之后添加了一个alert('');,以检查类是否实际应用,它正在应用,它正在申请一个moement,然后, add 类从可见元素中删除......
  • 显然还有一些其他代码(您没有显示)再次删除了该类。请显示所有相关代码或(更好)在 jsfiddle.net 或 jsbin.com 上发布一个简约示例
  • 好的,解决了我的问题,j('ul li') 附加了一个点击列表,用于在点击时切换类,在不同的 js 文件中用于不同的目的......之后@krister-andersson soultion 就像魅力...
【解决方案2】:

试试这个:

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

【讨论】:

    【解决方案3】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 2016-07-21
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多