在一系列片段中删除节点中的所有ID属性
-
01-10-2019 - |
题
有没有办法删除范围或片段中每个节点的ID属性?
更新:我终于发现,我正在努力的错误是基于A <[脚本]>包含在一个范围中的A <[脚本]>,因此当Chrome用户执行CTRL+A时,出乎意料的克隆。我的目标是从范围(或DOC片段)中删除<[script]>的任何实例,以使其在克隆时不会复制。
解决方案
您也许可以使用Treewalker,它几乎可以在所有范围内的浏览器中工作。
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");
});
其他提示
不隶属于 StackOverflow