【问题标题】:How to remove the parent element using plain Javascript如何使用纯 Javascript 删除父元素
【发布时间】:2010-04-28 08:05:40
【问题描述】:

如何使用纯 JavaScript 删除父元素和所有相应的节点?我没有使用 jQuery 或任何其他库。 换句话说,我有一个元素,当用户点击它时,我想删除父元素的父元素(以及相应的子节点)。

<table id='table'>
    <tr id='id'>
        <td>
            Mohit
        </td>   
        <td>
            23
        </td>   
        <td >
        <span onClick="edit(this)">Edit</span>/<span onClick="delete_row(this)">Delete</span>
        </td>   
        <td style="display:none;">
            <span onClick="save(this)">Save</span>
        </td>   
    </tr>   
</table>    

现在,

function delete_row(e)
{
    e.parentNode.parentNode.removeChild(e.parentNode);
}

将只删除最后一个&lt;td&gt;

如何直接删除&lt;tr&gt;>?

e.parentNode.parentNode.getAttribute('id')

返回行的id...

remove()delete()之类的函数吗?

【问题讨论】:

    标签: javascript html


    【解决方案1】:

    像这样改变你的函数:

    function delete_row(e)
    {
        e.parentNode.parentNode.parentNode.removeChild(e.parentNode.parentNode);
    }
    

    【讨论】:

      【解决方案2】:

      您现在可以使用node.remove() 删除整个元素 所以在你的情况下你会做

      function delete_row(e) {
          e.parentElement.remove();
      }
      

      您可以在此处阅读更多信息 https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove

      【讨论】:

      • 不错,比其他答案优雅得多
      【解决方案3】:
      node.parentNode.parentNode.removeChild(node.parentNode)
      

      编辑:需要删除parent的parent,所以再添加一个.parentNode

      node.parentNode.parentNode.parentNode.removeChild(node.parentNode.parentNode)
      

      【讨论】:

        【解决方案4】:

        或者对于那些喜欢单线的人

        <button onClick="this.parentNode.parentNode.removeChild(this.parentNode);">Delete me</button>
        

        【讨论】:

          【解决方案5】:

          我知道这有点太晚了,但其他人可能会觉得它很有用。
          刚刚为此写了一个函数。

          改变这个:

          onClick="delete_row(this)"
          

          到这里:

          onClick="removeParents(this, document.getElementById('id'))"
          

          function removeParents(e, root) {
              root = root ? root : document.body;
              var p = e.parentNode;
              while(root != p){
                  e = p;
                  p = e.parentNode;
              }
              root.removeChild(e);
          }
          

          http://jsfiddle.net/emg0xcre/

          【讨论】:

            【解决方案6】:

            使用 ES6 执行此操作的简单函数:

            const removeImgWrap = () => {
                const wrappedImgs = [...document.querySelectorAll('p img')];
                wrappedImgs.forEach(w => w.parentElement.style.marginBottom = 0);
            };
            

            【讨论】:

              【解决方案7】:

              我知道这有点太晚了,但其他人可能会觉得它有用。

               e.target.parentElement.parentElement.parentElement.remove()
              

              【讨论】:

              • 这很好用,与其他答案相比更直接。谢谢!
              【解决方案8】:

              我知道我来得太晚了,但我仍然看不到更准确的答案。

              所以你去吧。

              您可以指定更多。代替parentElement.parentElement 你可以这样做。

              static delete_row(element) { 
                 element.closest("tr").remove();
              }
              

              处理这种情况的另一种首选方法是事件传播,而不是在 html 元素中添加 onclick

              例如

              HTML

              <tr id='id'>
                 <td>Mohit</td>   
                 <td>23</td>
                 <td > 
                    <span class="edit">Edit</span> | 
                    <span class="delete">Delete</span>
                 </td>   
                 <td style="display:none;"><span class="save">Save</span></td>   
              </tr>
              

              JavaScript

               document.querySelector("#id").addEventListener("click", (e) => {
                 UI.handleEvents(e.target);
               });
              
               static handleEvents(el){
              
                 if (el.classList.contains("delete")) {
                   el.closest("tr").remove();
                 }
              
                 if (el.classList.contains("edit")) {
                   // do something else
                 }
                 
                 if (el.classList.contains("save")){
                   // save records
                 }
              
               }
              

              【讨论】:

              • 现在这是一个更好的答案,因为它更具可读性并且不依赖于特定的父/子 html 结构
              【解决方案9】:

              很好的问题。这对我有用:

               e.target.parentElement.parentElement.parentElement.remove()
              

              【讨论】:

                【解决方案10】:

                如果你想删除 wtvr 在 'tr' '/tr' 标签内,通过点击“Delete”,给那个 span 一个类名,(你不想 wtvr :D) 然后在 JS 代码中:您基本上选择人们将使用 document.querySelector() 单击的元素,向它添加一个事件侦听器,然后使用该 .wtvr 类单击该跨度,ID 名称为“id”的元素将被删除。

                document.querySelector('.wtvr').addEventListener('click', function () {
                  document.getElementById('id').remove();
                });
                    <table id="table">
                      <tr id="id">
                        <td>Mohit</td>
                        <td>23</td>
                        <td><span>Edit</span>/<span class="wtvr">Delete</span></td>
                        <td style="display: none">
                          <span>Save</span>
                        </td>
                      </tr>
                    </table>

                我把 onclick 拿走了,不知道你需要它们做什么。因为您可以仅使用 CSS 类和一些 JS 来删除 DOM 元素。如果这不是您的情况,希望这对其他人有所帮助。 我解释得很具体,所以像我这样的新手可以更好地理解逻辑。

                【讨论】:

                  【解决方案11】:

                  <div>
                      <span>1<button onclick="removeParents(this);">X</button></span>
                      <span>2<button onclick="removeParents(this);">X</button></span>
                      <span>3<button onclick="removeParents(this);">X</button></span>
                      <span>4<button onclick="removeParents(this);">X</button></span>
                  </div>
                  
                  <script>
                      function removeParents(e) {
                          var root = e.parentNode;
                          root.parentNode.removeChild(root);
                          console.log(root);
                      }
                  </script>

                  工作样本

                  【讨论】:

                  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-11-19
                  • 2011-08-21
                  • 2014-04-11
                  • 1970-01-01
                  • 2022-01-22
                  相关资源
                  最近更新 更多