gpt4 book ai didi

javascript - 从文档片段中删除所有带有 (nodeName = "script") 的节点 *在将其放入 dom* 之前

转载 作者:行者123 更新时间:2023-12-02 20:39:53 24 4
gpt4 key购买 nike

我的目标是在将片段插入 dom 之前从文档片段中删除所有 <[script]> 节点(保留片段的其余部分完好无损)。

我的片段是由以下内容创建的,看起来像这样:

    range = document.createRange();
range.selectNode(document.getElementsByTagName("body").item(0));
documentFragment = range.cloneContents();
sasDom.insertBefore(documentFragment, credit);
document.body.appendChild(documentFragment);

我在另一篇文章中得到了很好的范围步行者建议,但意识到我问了错误的问题。我得到了关于范围的答案,但我想问的是文档片段(或者也许有一种方法可以设置片段的范围? hrmmm)。提供的步行器是:

function actOnElementsInRange(range, func) {
function isContainedInRange(el, range) {
var elRange = range.cloneRange();
elRange.selectNode(el);
return range.compareBoundaryPoints(Range.START_TO_START, elRange) <= 0
&& range.compareBoundaryPoints(Range.END_TO_END, elRange) >= 0;
}

var rangeStartElement = range.startContainer;
if (rangeStartElement.nodeType == 3) {
rangeStartElement = rangeStartElement.parentNode;
}

var rangeEndElement = range.endContainer;
if (rangeEndElement.nodeType == 3) {
rangeEndElement = rangeEndElement.parentNode;
}

var isInRange = function(el) {
return (el === rangeStartElement || el === rangeEndElement ||
isContainedInRange(el, range))
? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
};

var container = range.commonAncestorContainer;
if (container.nodeType != 1) {
container = container.parentNode;
}

var walker = document.createTreeWalker(document,
NodeFilter.SHOW_ELEMENT, isInRange, false);

while (walker.nextNode()) {
func(walker.currentNode);
}
}

actOnElementsInRange(range, function(el) {
el.removeAttribute("id");
});

该步行器代码取自:Remove All id Attributes from nodes in a Range of Fragment

没有库(即 jQuery)。我想以原始方式做到这一点。预先感谢您的帮助

最佳答案

收集所有内容的最简单方法<script>节点将使用 getElementsByTagName ,但不幸的是,这并没有在 DocumentFragment 上实现.

但是,您可以创建一个临时容器并 append 片段中的所有元素,然后遍历并删除所有 <script>元素,像这样:

var temp = document.createElement('div');

while (documentFragment.firstChild)
temp.appendChild(documentFragment.firstChild);

var scripts = temp.getElementsByTagName('script');
var length = scripts.length;

while (length--)
scripts[length].parentNode.removeChild(scripts[length]);

// Add elements back to fragment:
while (temp.firstChild)
documentFragment.appendChild(temp.firstChild);

关于javascript - 从文档片段中删除所有带有 (nodeName = "script") 的节点 *在将其放入 dom* 之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2694279/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com