Ich muss jeden #text, der Geschwister hat, durch Spannen ersetzen, so dass sie IDs haben. Der folgende Code soll dies tun, aber aus irgendeinem Grund verursacht es viele Dokumente neu zu gestalten: Teile des Dokuments verschieben, Seite ändert sich das Aussehen.Das Ersetzen von #text-Elementen durch Spannen führt dazu, dass Dokumente neu gestaltet werden.
var eltId = 0;
function genEltId() {
return "my-id-" + ++eltId;
}
function hashTextsToSpans(elt) {
for (var i in elt.childNodes) {
var eltChild = elt.childNodes[i];
if (eltChild.nodeName == "#text" && elt.childNodes.length > 1) {
// #text is one of multiple childs
var eltDiv = document.createElement("span");
eltDiv.setAttribute("id", genEltId());
elt.replaceChild(eltDiv, eltChild);
eltDiv.appendChild(eltChild);
} else {
if (eltChild.nodeName != "IFRAME") {
hashTextsToSpans(eltChild);
}
}
}
}
function onKeyPress(e) {
if (e.keyCode == 105) {
// key I
hashTextsToSpans(document.body);
}
}
window.parent.addEventListener("keypress", onKeyPress);
Zum Beispiel injizieren sie in Chrom in https://en.wikipedia.org/wiki/Linux, drücken Sie "i" ("CJS" Add-on verwendet wird), und beobachten, dass die Seite neu formt.
Was ist das Problem? Sind nicht #text und span beide Inline-Elemente und sollten auf die gleiche Weise angezeigt werden, wenn der Text identisch ist und span keinen Stil hat?
Annahmen: keine Iframe-Elemente, kein anderes Javascript, das den DOM-Baum gleichzeitig manipuliert.
Verwenden Sie ein beliebiges CSS Framework? – doge1ord
keine Frameworks, ich injiziere js in Wikipedia als Beispiel mit "cjs" Addon. –
Keine Antwort, aber vielleicht möchten Sie sich die [TreeWalker' API] (https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker) ansehen, die in allen modernen Browsern verfügbar ist und macht diese Aufgabe viel einfacher zu codieren und zu pflegen. – rvighne