有没有办法删除范围或片段中每个节点的 id 属性?
更新:我终于发现我正在努力解决的错误是基于 <[script]> 被包含在一个范围内,因此当 chrome 用户执行 ctrl+a 时意外克隆。我的目标是从范围(或文档片段)中删除 <[script]> 的任何实例,以便在克隆时不会复制它。
有没有办法删除范围或片段中每个节点的 id 属性?
更新:我终于发现我正在努力解决的错误是基于 <[script]> 被包含在一个范围内,因此当 chrome 用户执行 ctrl+a 时意外克隆。我的目标是从范围(或文档片段)中删除 <[script]> 的任何实例,以便在克隆时不会复制它。
您也许可以使用 TreeWalker,它适用于 Range 支持的几乎所有浏览器。
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");
});