0

大家好

实际上,当我试图删除一些 DOM 元素时,我得到了“c.replace 不是一个函数”,而且……我不明白。

我想删除一些

  • 来自 DOM 的标签等,我做到了:

    var liste=document.getElementById("tabs").getElementsByTagName("li");
    
        for(i=0;i<liste.length;i++)
        {
            if(liste[i].id==2)
            {
                $("#tabs").detach(liste[i]);
            }
        }
    

    我试过 .detach 和 .remove 但它是一样的。我的 jQuery 版本是 1.7.1.min.js。

    感谢帮助。

  • 4

    4 回答 4

    5

    NodeLIst 上的迭代顺序

    在删除元素时对正在修改的 NodeList 进行前向迭代可能是一个问题。从 DOM 中删除元素时反向迭代。


    滥用detach()

    此外,.detach()不执行嵌套查找的参数,而是充当 jQuery 对象中现有元素的过滤器,并且应该传递一个字符串。看来您实际上想要分离li,这意味着您需要调用.detach()自身li...

    var liste=document.getElementById("tabs").getElementsByTagName("li");
    
    var i = liste.length
    
    while(i--) {
        if(liste[i].id==2) {
            $(liste[i]).detach();
        }
    }
    

    remove()可能是首选

    请记住,如果您使用.detach(),将保留任何 jQuery 数据。如果您不再使用该元素,则应该使用该元素.remove()

    // ...
        $(liste[i]).remove(); // clean up all data
    

    代码缩减

    最后,由于您使用的是 jQuery,您可以在选择器中执行所有这些操作...

    $('#tabs li[id=2]').remove(); // or .detach() if needed
    

    有效的 id 属性

    关于 ID,请记住这些项目...

    • 页面上的 ID 重复是无效的
    • 在 HTML4 中,ID 以数字开头是无效的

    在上面的选择器中,我使用了attribute-equals过滤器,所以它会起作用,但你应该使用有效的HTML 以避免其他地方出现问题。

    于 2012-04-20T13:06:16.853 回答
    3

    liste不是(还)一个 jQuery 对象。采用$(liste[i])

    或使用

    var liste= $('#tabs li');
    
    于 2012-04-20T13:03:32.093 回答
    0

    也许我遗漏了一些东西,但 id 是否应该与数字 2 匹配。

    var liste=document.getElementById("tabs").getElementsByTagName("li");
    
    for(i=0;i<liste.length;i++) {
        if(liste[i].id==2) {
           $(liste[i]).detach();
        }
    }
    

    既然您已经在使用 jQuery,为什么不这样做:

    $("li", "#tabs").filter("#2").detach();
    
    于 2012-04-20T13:11:29.037 回答
    0
    var two = document.getElementById('2');
    two.parentNode.removeChild(two);
    
    于 2012-04-20T13:13:06.227 回答