2010-11-27 108 views
0

當我嘗試使用$ element.remove()時,它不起作用,因爲該元素不在dom內部。我試圖使用$ element.html(「」),但那隻會刪除內部的html。我想清楚整個對象。JQuery刪除問題

編輯

,告訴我,當元素被添加到DOM會有所幫助,因爲這樣我可以在上面做element.remove()的事件。

編輯2

好了,關於這個問題的更多信息。我有2個可排序的列表(由於多種原因而未連接),並且增加了在這兩個可排序列表之間移動元素的功能。但是在將元素添加到另一個列表後直接執行,IE將其移回原始列表。

所以我認爲我把這個項目複製到另一個列表(而不是移動它)並刪除舊的。但由於元素在內存中,原來的列表只是再次添加它。這就是爲什麼我認爲如果我清除元素(將它變成「」),那麼它不會再添加到原始列表中,因爲它只是一個空字符串。

也許這個問題有更好的解決辦法嗎?建議?

+2

如果它不在DOM中,您爲什麼需要清除它? – 2010-11-27 15:15:59

+0

因爲IE將元素添加到dom的速度很慢。在Firefox中按預期工作。 – Andreas 2010-11-27 15:45:05

+0

堅持...你說$ element.html(「」)刪除了該元素的內部HTML - 這意味着它已經在DOM中了......你確定問題出在你說的地方? – 2010-11-27 16:28:46

回答

0

好吧,我所做的就是用attr(「remove」,「true」)標記項目,並有一個腳本在新項目被刪除時通過我的元素並刪除那些應該刪除的項目。不是理想的解決方案,但它有效。

1

很難說清楚您需要什麼,但是您在尋找the .not() method?這會過濾掉(在頂層)任何匹配你選擇的元素或元素。

var str = '<div>a div</div>\ 
     <span>a span</span>\ 
     <p>a paragraph</p>'; 

var $obj = $(str); 

// remove the span before appending 
$obj.not('span').appendTo('body'); 

編輯:

從下面的評論,它好像要防止來自服務器元素的渲染。這是不可能的JavaScript。 Javascript只能操作已經解析成DOM元素的元素。這意味着,當您的javascript有機會操作它時,它已經被顯示。

根據您的情況,如果您在服務器端無法處理此問題,則可以嘗試將元素的CSS設置爲display:none。這不會阻止它被解析,但會阻止它在頁面上繪製。

0

也許你很困惑.remove().empty()

關於在向DOM添加東西時IE速度很慢,是的,您正在使用的是一種有用的技術,通過一次添加所有內容來增加速度。

 
$box = $('#thebox').remove().empty(); 
$box.append(...); 
$box.append(...); 
$box.append(...); 
... 
$box.append(...); 
$('#theparentofthebox').append($box); 

在這裏,.remove()更象分離從DOM元素。