Rimuovere tutti gli attributi ID di nodi in una gamma di Frammento
-
01-10-2019 - |
Domanda
C'è un modo per rimuovere l'attributo id di ogni nodo in un intervallo o un frammento?
Aggiornamento: ho finalmente scoperto che il bug sto lottando con si basa su un <[sceneggiatura]> essendo inclusa in un intervallo, e quindi inaspettatamente clonato, quando un utente di Chrome fa un Ctrl + A. Il mio obiettivo sarebbe quello di eliminare qualsiasi istanza di <[Script]> della gamma (o frammento doc), in modo tale che non viene replicato quando clonata.
Soluzione
Si può essere in grado di utilizzare un TreeWalker, che funziona in quasi tutte le browers che vanno lavora in.
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");
});
Altri suggerimenti
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow