2013-07-05 108 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中刪除了,然後我試圖在它上面遍歷,所以難怪它不起作用!