Frage

Gibt es eine Möglichkeit das id-Attribut jedes Knotens in einem Bereich oder ein Fragment?

zu entfernen

Update: Ich fand schließlich heraus, dass der Fehler, den ich mit bin zu kämpfen basiert auf einem <[script]> in einem Bereich enthalten ist, und deshalb unerwartet geklont, wenn ein Chrom-Benutzer hat eine Strg + A. Mein Ziel wäre es, eine Instanz von <[script]> entfernen aus dem Bereich (oder doc-Fragmente), so dass es nicht repliziert wird, wenn geklont.

War es hilfreich?

Lösung

Unter Umständen können Sie eine TreeWalker verwenden, die in so ziemlich allen Browsern funktioniert, dass Bereich arbeitet.

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");
});
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top