0

我已经将元素插入到 DOM 中appendTo()。我试图从附加元素内部遍历 DOM,以获取对附加元素附加到的元素的引用。但这似乎对我不起作用。我通过将结果输出parent()到控制台进行了一些故障排除。每次我退后一级时,我都会得到一个结果,parent()直到我到达附加元素的父级。此时parent()返回一个空集。

以下是说明此问题的代码示例:

  <div class="menu">
     <span class="like current"></span>
     <span class="done"></span>
     <span class="add"></span>
     <span class="report"></span>
     <div class="panel">
        <div class="panel-content">
           <p>This function is not yet implemented</p>
           <p>
              <a class="cancel" onclick="cancel_panel(this)">Cancel</a>
           </p>
        </div>
     </div>
  </div>

div.panel已附加到div.menuwithappendTo()div.panel-content已附加到div.panelwithappendTo()

我想要实现的是currentspan.like单击取消链接中删除类。

我试过了:

 $(elem).closest("div.menu").children("span.current").removeClass("current");

a(其中 elem 是对取消链接元素的引用)

但它不起作用。$(elem).closest("div.menu")返回一个空集而不是div.menu

在进一步的故障排除中,$(elem).parent()给了我对p标签$(elem).parent().parent().parent()的预期引用,给了我对div.panel. 但$(elem).parent().parent().parent().parent()返回一个空集。

这里发生了什么?遍历 DOM 时,附加元素的响应方式是否与真实元素不同?jquery 是否会通过嵌套追加来松散情节?我怎样才能获得对 back to the 的引用div.menu

4

4 回答 4

1

我尝试使用脚本在这里重现您的问题:

$(function() {

    var elem = $('<a class="cancel">Cancel</a>')
        .click(cancel_panel)
        .appendTo($(".panel-content").children().last());


    function cancel_panel() {                 
        $(elem).closest("div.menu")
        .children("span.current")
        .removeClass("current");
    }     
});

&上面的HTML。但找不到任何问题:

$(elem).closest("div.menu").children("span.current").removeClass("current");

一定要看看它并检查问题是否出在其他地方。

于 2013-07-05T04:22:40.580 回答
0
$(elem).parents().filter(".menu").children("span.current").removeClass("current");

我在这里做了一个测试,似乎效果很好。

于 2013-07-05T04:22:50.587 回答
0

问题解决了。附加元素的jQuery DOM遍历工作得很好。饥饿痛苦的 jsfiddle 演示证明我在问题中包含的代码部分没有问题。那是另外一回事。在重新检查我的代码后,我发现div.panel我在尝试向上遍历它之前已经从 DOM 中删除了,所以难怪它不起作用!

于 2013-07-05T04:43:32.637 回答
0

尝试找到您的“喜欢当前”类并在该元素处重命名为“喜欢”

于 2013-07-05T04:07:51.270 回答