当我尝试使用$ element.remove()时,它不起作用,因为该元素还没有在dom中。我曾尝试使用$ element.html(""),但这只会删除内部html。我想清除整个对象。
修改
一个事件告诉我什么时候元素被添加到dom会有所帮助,因为那时我可以对它执行element.remove()。
编辑2
好的,有关此问题的更多信息。我有2个可排序的列表(由于多种原因没有连接),我添加了functionlity来在这两个可排序列表之间移动元素。但是在我将元素添加到另一个列表后,直接将IE移回原始列表。
所以我认为我将项目复制到另一个列表(而不是移动它)并删除旧项目。但由于元素在内存中,原始列表只是再次添加它。
这就是为什么我认为如果我清除元素(将其转换为""),那么如果它再次添加到原始列表中它就不会发生,因为它& #39; s只是一个空字符串。
也许这个问题有更好的解决方案?建议?
答案 0 :(得分: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
。这不会阻止它被解析,但它会阻止它被绘制在页面上。
答案 1 :(得分:0)
也许您将.remove()
与.empty()
混淆了?
关于IE在向DOM添加内容时速度慢,是的,您正在使用的是通过一次添加所有内容来增加速度的有用技术。
$box = $('#thebox').remove().empty(); $box.append(...); $box.append(...); $box.append(...); ... $box.append(...); $('#theparentofthebox').append($box);
在这里,.remove()
更像是分离来自DOM的元素。
答案 2 :(得分:0)
好的,我所做的就是用attr(“remove”,“true”)来标记项目,并在删除新项目时删除那些应删除的人员,然后让脚本通过我的元素。理想的解决方案,但它有效。