Existe-t-il un moyen de supprimer l'attribut id de chaque nœud d'une plage ou d'un fragment? Mise à jour: J'ai finalement découvert que le bogue avec lequel je me bats est basé sur un < [script]> inclus dans une plage, et donc cloné de manière inattendue, quand un utilisateur chrome fait un ctrl + a. Mon objectif serait de supprimer toute instance de < [script]> de la plage (ou du fragment de document), de sorte qu'elle ne soit pas répliquée lors du clonage.Supprimer tous les attributs id des nœuds d'une plage de fragments
Répondre
Vous pourriez être en mesure d'utiliser un TreeWalker, qui travaille dans à peu près tous les navigateurs que Range travaille dans
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");
});
Merci Tim - vous êtes très utile. Mais je ne suis pas sûr que ça a marché. J'ai mis en place une page de test ici: http://latentmotion.com/link-building/test-clone.html – Matrym
Semble travailler pour moi. Que voyez-vous qui ne va pas? En passant, je viens de mettre à jour ma réponse pour supprimer une déclaration de journalisation que j'avais laissée accidentellement. –
Le PO pose des questions sur les gammes DOM, pas sur les éléments. –
Une solution sans bibliothèque serait préférable dans ce cas - même autant que j'aime jquery. – Matrym
Ce que Tim a dit, et je n'ai vu aucune mention de jQuery dans les tags ou la question. Certaines personnes aiment encore coder dans 'Plain ol' JavaScript & DOM ™ ', vous savez! –
Ce qui se qualifie comme « dans »? –