2010-11-27 200 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元素。