Javascript 删除<;李>';在另一个中具有相同值的<;李>;

Javascript 删除<;李>';在另一个中具有相同值的<;李>;,javascript,Javascript,如果有两个,一个称为列表a,另一个称为列表b,使用javascript而不使用任何像jQuery这样的库,您将如何删除列表a中与列表b中的值相同的 以下是示例HTML: <ul id="list_a"> <li value="1">list_a_0</li> <li value="8">list_a_8</li> <li value="9">list_a_9</li> </u

如果有两个
,一个称为
列表a
,另一个称为
列表b
,使用javascript而不使用任何像jQuery这样的库,您将如何删除
列表a
中与
列表b
中的值相同的
  • 以下是示例HTML:

      <ul id="list_a">
        <li value="1">list_a_0</li>
        <li value="8">list_a_8</li>
        <li value="9">list_a_9</li>
      </ul>
    
      <ul id="list_b">
        <li value="8">list_b_8</li>
        <li value="9">list_b_9</li>
        <li value="2">list_b_2</li>
      </ul>
    
    谢谢

    演示:

    window.onload=function(){
    var listA=document.getElementById(“列表a”);
    var listB=document.getElementById(“列表b”);
    for(var i=0;i
    • 不要在数值索引的迭代中使用

    • 缓存DOM选择,而不是在循环中重新选择

    • 使用
      .children
      而不是
      .childNodes
      避免元素之间的文本节点

    • 比较
      .value
      而不是
      .innerHTML

    • 删除
      x
      而不是
      listA

    • 列表a
      中删除元素时,减量
      i
      ,因为从DOM中删除意味着从
      .children
      集合中删除

    函数初始化(){
    var listA=document.getElementById(“列表a”);
    var listB=document.getElementById(“列表b”);
    
    对于(var i=0;i
    listA.removeChild(listA);
    应该是
    listA.removeChild(x)
    我相信。看起来应该足够了。虽然…
    .innerHTML
    永远不会相同,因为列表项的内容不同。试着比较它们的
    .value
    ,看看这是否适合您的需要。我很好奇这个用例。可以这样做,但您的问题显然存在于其他地方(为什么要在JS中修复此问题)!不要使用innerhtml,请使用textnode及其值。此外,只需保留遇到的值的散列,如果该值已经存在,请删除该节点并移动到下一个节点。
      <ul id="list_a">
        <li value="1">list_a_0</li>
        <!-- DELETED TWO <li>'s -->
      </ul>
    
      <ul id="list_b">
        <li value="8">list_b_8</li>
        <li value="9">list_b_9</li>
        <li value="2">list_b_2</li>
      </ul>
    
    window.onload=function()
    {
      init();
    
      function init()
      {
        var listA = document.getElementById("list_a");
    
        for(var i in listA.childNodes)
        {
          var x = listA.childNodes[i];
          var listB = document.getElementById("list_b");
    
          for(var j in listB.childNodes)
          {
            var y = listB.childNodes[j];
            if(x.innerHTML == y.innerHTML)
              listA.removeChild(listA);
          }
        }          
      }  
    }
    
    window.onload = function() {
    
        var listA = document.getElementById("list_a");
        var listB = document.getElementById("list_b");
    
        for (var i = 0; i < listA.children.length; i++) {
            var x = listA.children[i];
    
            for (var j = 0; j < listB.children.length; j++) {
                var y = listB.children[j];
                if (x.value == y.value) {
                    listA.removeChild(x);
                    i--;
                }
            }
        }
    }
    
      function init() {
        var listA = document.getElementById("list_a");
        var listB = document.getElementById("list_b");
    
        for(var i =0; i<listA.children.length;i++) {
          var x = listA.children[i];
    
          for(var j in listB.children) {      
            var y = listB.children[j];
            if(x.value == y.value)
               x.parentNode.removeChild(x);
          }
        }          
      }