Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 移除id为的div中的ul中的li上的child?_Javascript_Dom - Fatal编程技术网

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

Javascript 移除id为的div中的ul中的li上的child?,javascript,dom,Javascript,Dom,我在网页上有以下代码: <div id="emails"> <ul> <li>email1</li> <li>email2</li> </ul> </div> <a href="#" onClick="deleteEmail()">click</a> 我对Javascript DOM有点陌生,所以如果有更好的方法,请告诉我 注意:我希望在不使用任何js框架的情况下执行此操作

我在网页上有以下代码:

<div id="emails">
<ul>
<li>email1</li>
<li>email2</li>
</ul>
</div>

<a href="#" onClick="deleteEmail()">click</a>
我对Javascript DOM有点陌生,所以如果有更好的方法,请告诉我

注意:我希望在不使用任何js框架的情况下执行此操作。

最正确:

var ul = document.getElementById('emails').getElementsByTagName('ul')[0];
var li = ul.getElementsByTagName('li')[0];
ul.removeChild(li)
1) 更正确的字符串:

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

2) 请注意,在“ul.childNodes[i]”中,i将为0表示空格,1表示电子邮件,2表示空格等。如果仅在
  • 中安装,则应使用ul.getElementsByTagName('li')[i]。DOM节点的子节点包括文本和注释,而不仅仅是元素,因此,为了确定要删除的元素位于哪个索引,需要考虑它们。在您的情况下,
    中第一个
  • 的索引是
    1

    “email”div的DOM如下所示:

    DIV
      text( whitespace )
      UL
        text ( whitespace )
        LI 
          text (email1)
        text ( whitespace )
        LI
          text (email2)
        text ( whitespace )
      text (whitespace)
    
    也就是说,直接找到要删除的
  • 然后删除它可能是最简单的方法

    var toRemove = document.
          getElementById('emails').
          getElementsByTagName('ul')[0]. 
          getElementsByTagName('li')[0];
    
    toRemove.parentNode.removeChild( toRemove );
    
    如果将字符串“email#”转换为链接。。。大概是这样的:

    具有与此类似的功能

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

    虽然您可以在不使用onClick的情况下使用removelement(),但我喜欢它所允许的简单性。

    您的代码会产生任何可见的结果吗?在onClick开始时,您不需要“javascript:”,只有在href中才需要它。它还缺少函数调用-应该是deleteMail(),哦,是的,我输入了它,但忘了添加(),thanks@inkedmn,它给了我一个关于removeChild不是firebug上的ul方法的错误:/or onclick=“parentNode.removeChild(this)”这也非常有用,我一定会使用基于此的解决方案。谢谢您的额外解释,非常有用!
    <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]);
    }
    
    function removeElement(childElm) {
      var parentElm = childElm.parentNode;
      parentElm.removeChild(childElm);
    }