使用纯JavaScript在点击时删除父元素

iam*_*wtk 1 javascript

我正在尝试学习以前在jQuery中使用普通JavaScript所做的事情。

我有我在互联网上找到的要解决的示例,这确实给了我很多麻烦。

我正在尝试div.single点击删除父对象button.remove

这是代码;

 var btn = document.getElementsByClassName('remove')
    
 for (var i = 0; i < btn.length; i++) {
    btn[i].addEventListener('click',function (e) {      
      e.parentNode.parentNode.removeChild(e.parentNode);
    } , false);
 }
Run Code Online (Sandbox Code Playgroud)
 <div class="single">
    <img src="http://via.placeholder.com/150x150">
    <button type="button" class="remove">X1</button>
  </div>
  <div class="single">
    <img src="http://via.placeholder.com/150x150">
    <button type="button" class="remove">X2</button>
  </div>
  <div class="single">
    <img src="http://via.placeholder.com/150x150">
    <button type="button" class="remove">X3</button>
  </div>
  <div class="single">
    <img src="http://via.placeholder.com/150x150">
    <button type="button" class="remove">X4</button>
  </div>
Run Code Online (Sandbox Code Playgroud)

我出错了e.parentNode is undefined

这是执行相同操作的jQuery代码。

$(document).ready(function() {  
  $(document).on('click', '.remove', function () {    
    $(this).parent('.single').remove()
  })
})
Run Code Online (Sandbox Code Playgroud)

感谢您的任何答案。

Tar*_*aji 14

以快捷方式删除父节点:

<div class="single">
   <img src="http://via.placeholder.com/150x150">
   <button type="button" onclick="return this.parentNode.remove();" class="remove">X</button>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 我不得不说我更喜欢这个,因为它对于动态创建的元素也非常有效。想象一下,构建一个动态添加元素的页面,而不是在加载时呈现元素的 OP 版本,这会工作得最好,因为它将自身作为子节点附加到该特定元素。华丽的! (2认同)

Aru*_*hny 7

您需要从事件对象(currentTarget / target)中获取元素引用

注意:所有现代浏览器都支持Node.remove()

var btn = document.getElementsByClassName('remove')

for (var i = 0; i < btn.length; i++) {
  btn[i].addEventListener('click', function(e) {
    e.currentTarget.parentNode.remove();
    //this.closest('.single').remove() // in modern browsers in complex dom structure
    //this.parentNode.remove(); //this refers to the current target element 
    //e.target.parentNode.parentNode.removeChild(e.target.parentNode);
  }, false);
}
Run Code Online (Sandbox Code Playgroud)
<div class="single">
  <img src="http://via.placeholder.com/150x150">
  <button type="button" class="remove">X1</button>
</div>
<div class="single">
  <img src="http://via.placeholder.com/150x150">
  <button type="button" class="remove">X2</button>
</div>
<div class="single">
  <img src="http://via.placeholder.com/150x150">
  <button type="button" class="remove">X3</button>
</div>
<div class="single">
  <img src="http://via.placeholder.com/150x150">
  <button type="button" class="remove">X4</button>
</div>
Run Code Online (Sandbox Code Playgroud)