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

移除id为的div中ul中li的child?

  •  3
  • Prozaker  · 技术社区  · 14 年前

    我在网页上有以下代码:

    <div id="emails">
    <ul>
    <li>email1</li>
    <li>email2</li>
    </ul>
    </div>
    
    <a href="#" onClick="deleteEmail()">click</a>
    

    我想删除第一封邮件,我一直在尝试:

    function deleteEmail(){
        var ul = document.getElementById('emails').getElementsByTagName('ul');
        ul.removeChild(ul.childNodes[0]);
    }
    

    我对Javascript DOM有点陌生,所以如果有更好的方法,请告诉我。

    5 回复  |  直到 14 年前
        1
  •  3
  •   Aaron Butacov    14 年前

    最正确:

    var ul = document.getElementById('emails').getElementsByTagName('ul')[0];
    var li = ul.getElementsByTagName('li')[0];
    ul.removeChild(li)
    
        2
  •  3
  •   Pavel Strakhov    14 年前

    1) 更正确的字符串:

    var ul = document.getElementById('emails').getElementsByTagName('ul')[0];
    

    2) 请注意,在“ul.childNodes[i]”中,i将为0表示空格,1表示 <li>email1</li> <li>

        3
  •  1
  •   jimr    14 年前

    DOM节点的子节点包括文本和注释,而不仅仅是元素,因此为了确定要删除的元素位于哪个索引,需要考虑它们。在您的例子中,第一个 <li> <ul> 1 .

    “email”div的DOM如下所示:

    DIV
      text( whitespace )
      UL
        text ( whitespace )
        LI 
          text (email1)
        text ( whitespace )
        LI
          text (email2)
        text ( whitespace )
      text (whitespace)
    

    <li>

    var toRemove = document.
          getElementById('emails').
          getElementsByTagName('ul')[0]. 
          getElementsByTagName('li')[0];
    
    toRemove.parentNode.removeChild( toRemove );
    
        4
  •  1
  •   Warty    14 年前
    <div id="emails">
    <ul>
    <li>email1</li>
    <li>email2</li>
    </ul>
    </div>
    
    <a href="#" onClick="deleteEmail()">click</a> 
    <!--note that I made it so you actually invoke deleteEmail -->
    

    我想删除第一封邮件,我一直在尝试:

    function deleteEmail(){
        //I believe you meant emails =/
        var ul = document.getElementById('emails').getElementsByTagName('ul');
        ul.removeChild(ul.getElementsByTagName("li")[0]);
    }
    
        5
  •  1
  •   Brook Julias    14 年前

    如果您将字符串“email#”转换为链接。。。像这样:

    <a href="" onClick="removeElement(this.parentNode);return false">email1</a>

    具有与此类似的功能。

    function removeElement(childElm) {
      var parentElm = childElm.parentNode;
      parentElm.removeChild(childElm);
    }
    

    虽然你可以不用onClick来使用removeElement(),但我喜欢它的简单性。