2013-07-05 64 views
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.menuappendTo()div.panel-content已追加到与appendTo()

我试图实现点击“取消”链接,从span.like中删除类current

我已经试过:

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

(其中ELEM是参照取消链接的a元素)

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

在进一步的故障排除,$(elem).parent()给了我预期的参考p标签,$(elem).parent().parent().parent()给了我预期的参考。但$(elem).parent().parent().parent().parent()返回一个空集。

这是怎么回事?遍历DOM时,附加元素不会以与真实元素相同的方式响应吗? jquery是否使用嵌套追加来释放阴谋?我怎样才能得到回div.menu的参考?

+0

跨度通常不会自闭。你的文档类型是什么? – j08691

+0

在他们不是真正的代码 - 代码在这里只是截断/简化的目的的问题 – AidanCurran

+1

似乎在这里工作... http://jsfiddle.net/hungerpain/mEJbF/1/ 所有我改变了是我拿出'onclick'并将它变成jQuery的'click'事件 – krishgopinath

回答

0

尝试找到自己的“像目前的”类,并重新命名为“喜欢”的那个元素

+0

对不起,这不是我的问题的答案 – AidanCurran

1

我试着用脚本复制您的问题here

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

做看看,如果&检查问题在于其他地方。

0
$(elem).parents().filter(".menu").children("span.current").removeClass("current"); 

我做了一个测试here,这似乎很好地工作。

0

问题解决。附加元素的jquery DOM遍历工作得很好。 hungerpain的jsfiddle演示证明我的问题中包含的部分代码没有问题。这是另一回事。在重新检查我的代码之后,我发现我已经从DOM中删除了,然后我试图在它上面遍历,所以难怪它不起作用!