代码之家  ›  专栏  ›  技术社区  ›  Andreas

jquery删除问题

  •  0
  • Andreas  · 技术社区  · 15 年前

    当我尝试使用$element.remove()时,它不起作用,因为该元素还不在DOM中。我尝试使用$element.html(“”),但这只会删除内部的html。我想把整个物体清理干净。

    编辑

    告诉我何时将元素添加到DOM的事件会有所帮助,因为这样我就可以对它执行element.remove()。

    编辑2

    好的,关于这个问题的更多信息。我有两个可排序列表(由于多种原因没有连接),并且我添加了在这两个可排序列表之间移动元素的功能。但direclty在我将元素添加到另一个列表之后,即将其移回原始列表。

    所以我想我把这个项目复制到另一个列表(而不是移动它)并删除旧的列表。但是由于元素在内存中,原始列表只会再次添加它。

    这就是为什么我认为如果我清除元素(将其转换为“”),那么如果它再次被添加到原始列表中,它就不会计算,因为它只是一个空字符串。

    也许这个问题有更好的解决办法?建议?

    3 回复  |  直到 15 年前
        1
  •  1
  •   user113716    15 年前

    很难说你需要什么,但你在找吗 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 . 这不会阻止它被解析,但会阻止它被绘制到页面上。

        2
  •  0
  •   timdream    15 年前

    也许你很困惑 .remove() 具有 .empty() ?

    关于IE在向DOM添加东西时速度慢,是的,您使用的是一种很有用的技术,可以通过一次添加所有东西来加快添加速度。

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

    在这里, 。删除() 工作方式更像 分离 来自DOM的元素。

        3
  •  0
  •   Andreas    15 年前

    好的,那么我所做的就是用attr(“remove”,“true”)标记项目,并在删除新项目时有一个脚本来遍历我的元素,然后删除那些应该删除的项目。不是理想的解决方案,但它有效。