当前位置: 首页 > 面试题库 >

在JavaScript中删除DOM节点的所有子元素

萧和平
2023-03-14
问题内容

我将如何删除JavaScript中DOM节点的所有子元素?

说我有以下(丑陋的)HTML:

<p id="foo">
    <span>hello</span>
    <div>world</div>
</p>

我抓住了我想要的节点,如下所示:

var myNode = document.getElementById("foo");

我怎么能去掉的孩子foo,这样正好<p id="foo"></p>还剩下什么?

我可以做:

myNode.childNodes = new Array();

还是我应该使用某种组合removeElement

我希望答案直接是DOM;如果您还提供jQuery答案以及仅DOM答案,则需要加分。


问题答案:

选项1 A:清算innerHTML。

这种方法很简单,但可能会不适用于高性能应用程序,因为它会调用浏览器的HTML解析器(尽管浏览器 可以 针对值是空字符串的情况进行优化)。
    doFoo.onclick = () => {

    const myNode = document.getElementById(“foo”);

    myNode.innerHTML = ‘’;

    }

    [HTML_REMOVED]

    [HTML_REMOVED]Hello[HTML_REMOVED]

    [HTML_REMOVED]

    [HTML_REMOVED]Remove via innerHTML[HTML_REMOVED]

选项1 B:清算 textContent

如上,但使用.textContent。根据MDN的说法,这将比innerHTML浏览器不会调用其HTML解析器,而将立即用单个#text节点替换元素的所有子代更快。
    doFoo.onclick = () => {

    const myNode = document.getElementById(“foo”);

    myNode.textContent = ‘’;

    }

    [HTML_REMOVED]

    [HTML_REMOVED]Hello[HTML_REMOVED]

    [HTML_REMOVED]

    [HTML_REMOVED]Remove via textContent[HTML_REMOVED]

选项2 A:循环删除以下所有内容lastChild:

早先对此答案进行了修改firstChild,但已更新lastChild为在计算机科学中使用, 通常来说 ,删除集合的 最后一个 元素比删除第 一个 元素要快得多(具体取决于集合的实现方式) )。

循环将继续检查,firstChild 以防万一 其检查速度firstChild比lastChild(例如,如果UA将元素列表实现为有向链接列表)。
    doFoo.onclick = () => {

    const myNode = document.getElementById(“foo”);

    while (myNode.firstChild) {

    myNode.removeChild(myNode.lastChild);

    }

    }

    [HTML_REMOVED]

    [HTML_REMOVED]Hello[HTML_REMOVED]

    [HTML_REMOVED]

    [HTML_REMOVED]Remove via lastChild-loop[HTML_REMOVED]

选项2 B:循环删除以下所有内容lastElementChild:

这种方法保留了父级的所有非Element(即#text节点和<!-- comments -->)子级(但不保留其子级)-这在您的应用程序中可能是理想的(例如,某些使用内联HTML注释存储模板指令的模板系统)。

直到最近几年才使用这种方法,因为Internet Explorer仅添加了lastElementChild对IE9的支持。
    doFoo.onclick = () => {

    const myNode = document.getElementById(“foo”);

    while (myNode.lastElementChild) {

    myNode.removeChild(myNode.lastElementChild);

    }

    }

    [HTML_REMOVED]

    [HTML_REMOVED]

    [HTML_REMOVED]Hello [HTML_REMOVED][HTML_REMOVED]

    [HTML_REMOVED]

    [HTML_REMOVED]

    [HTML_REMOVED]Remove via lastElementChild-loop[HTML_REMOVED]

奖励:Element.clearChildren猴子补丁:

我们可以在新的方法,属性添加到ElementJavaScript中的原型简化它调用只el.clearChildren()(其中el的 任何 HTML元素的对象)。

(严格来说,这是一个猴子补丁,而不是polyfill,因为这不是标准的DOM功能或缺少的功能。请注意,在许多情况下,不建议使用猴子补丁。)
    if( typeof Element.prototype.clearChildren === ‘undefined’ ) {

    Object.defineProperty(Element.prototype, 'clearChildren', {

      configurable: true,

      enumerable: false,

      value: function() {

        while(this.firstChild) this.removeChild(this.lastChild);

      }

    });

    }

    [HTML_REMOVED]

    [HTML_REMOVED]Hello [HTML_REMOVED][HTML_REMOVED]

    [HTML_REMOVED]

    [HTML_REMOVED]Remove via monkey-patch[HTML_REMOVED]


 类似资料:
  • 本文向大家介绍如何在JavaScript中删除DOM节点的所有子元素?,包括了如何在JavaScript中删除DOM节点的所有子元素?的使用技巧和注意事项,需要的朋友参考一下 删除<div>的子元素 我们可以用, 它将删除的所有子项 其ID为“ mList”。 示例 在您的代码中,它可以写为-

  • 本文向大家介绍Javascript removeChild()删除节点及删除子节点的方法,包括了Javascript removeChild()删除节点及删除子节点的方法的使用技巧和注意事项,需要的朋友参考一下 下面给大家介绍Javascript removeChild()删除节点的方法,具体详情如下所示: 在Javascript中,只提供了一种删除节点的方法:removeChild()。 rem

  • 在本章中,我们将学习XML DOM删除节点的操作。删除节点操作是指从文档中删除指定的节点。实现此操作以移除诸如文本节点,元素节点或属性节点之类的节点。 以下是用于删除节点操作的方法 - 方法 方法 1. removeChild()方法 方法从子列表中删除指示的子节点,并将其返回。 删除子节点等同于删除文本节点。 因此,删除子节点会删除与其关联的文本节点。 语法 使用方法的语法如下 - 其中, -

  • 问题内容: 在使用Jenkins Docker插件时,可能由于错误而导致无法启动群集。我没有注意,目前有数千个脱机节点无法启动。 底线-是否可以批量删除Jenkin中的节点(从属),清理所有脱机节点甚至删除所有节点?重置Jenkins服务器没有帮助,而且我在Jenkins API中找不到方法。 在我开始编写Selenium脚本之类的东西之前,请感谢任何想法。 非常感谢! 问题答案: 该脚本的注释部

  • 本文向大家介绍删除Javascript树中的节点,包括了删除Javascript树中的节点的使用技巧和注意事项,需要的朋友参考一下 如果从远处看,从树中删除节点非常复杂。删除节点时需要考虑3种情况。这些在以下功能的注释中提到。正如我们之前所做的那样,我们将在类中创建一个方法和一个递归调用的助手。 类方法 辅助方法 您可以使用以下方式进行测试:  示例 输出结果 这将给出输出-

  • 问题内容: 只是一个问题:有什么方法可以完全删除对象(例如div)的所有事件? 编辑:我正在添加一个事件。 EDIT2:我找到了一种可行的方法,但无法用于我的情况: 问题答案: 我不确定 _删除 所有 事件_是什么意思。删除特定事件类型的所有处理程序还是删除一种类型的所有事件处理程序? 删除所有事件处理程序 如果要删除所有(任何类型的)事件处理程序,则可以克隆 该元素并将其替换为其克隆: 注意: