Удалите все атрибуты ID из узлов в диапазоне фрагмента

StackOverflow https://stackoverflow.com/questions/2690122

Вопрос

Есть ли способ удалить атрибут ID каждого узла в диапазоне или фрагменте?

Обновление: я, наконец, выяснил, что ошибка, с которой я борюсь, основана на включении <[Script]> в диапазоне, и, следовательно, неожиданно клонирован, когда пользователь Chrome + A. Моя цель будет удалять любой экземпляр <[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");
});

Другие советы

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top