Pregunta

¿Hay una manera de eliminar el atributo id de cada nodo en una gama o fragmento?

Actualización: Finalmente me di cuenta de que el error que estoy luchando con se basa en un <[script]> está incluido en un rango, y por lo tanto de forma inesperada clonado, cuando un usuario hace un cromo Ctrl + A. Mi objetivo sería eliminar cualquier instancia de <[script]> de la (fragmento o doc) gama, de manera que no se replica cuando clonado.

¿Fue útil?

Solución

Es posible que pueda utilizar un TreeWalker, que funciona en casi todos los navegadores que trabaja en la gama.

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");
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top