Also, zuerst fo alle:
var code = document.getElementsByTagName('code').innerHTML;
document.getElementsByTagName gibt eine Liste Elemente nicht nur eins zurück. Also, wenn Ihr Zweck alle die code
Tags, die Sie in der Seite haben, zu entkommen, müssen Sie sie iterieren. Zweitens glaube ich, dass Sie regexp vermeiden können, nur mit textContent
(wo unterstützt) oder innerText
.
var codes = document.getElementsByTagName("code");
for (var i = 0, code; code = codes[i++];) {
if ("textContent" in code)
code.textContent = code.innerHTML;
else if ("innerText" in code)
code.innerText = code.innerHTML;
}
oder einen neuen Textknoten erstellen:
var codes = document.getElementsByTagName("code");
for (var i = 0, code, html; code = codes[i++];) {
html = code.innerHTML;
code.innerHTML = "";
code.appendChild(document.createTextNode(html));
}
Das ist sollte alle HTML-Entities entkommen. Wenn Sie immer noch den regulären Ausdruck, vielleicht als Ausweich verwenden möchten, können Sie diese Art von Funktion haben:
var escapeEntities = (function(){
var entities = {"<" : "lt", ">" : "gt", "&" : "amp" };
var re = new RegExp("[" + Object.keys(entities).join("") + "]", "g");
function replaceEntities(match) {
return match in entities ? "&" + entities[match] + ";" : match;
}
return function(value) {
return value.replace(re, replaceEntities);
}
})()
Und dann in Ihrem Code:
code.innerHTML = escapeEntities(code.innerHTML);
Beachten Sie, dass, wenn Object.keys nicht unterstützt wird, kann verwenden Sie leicht eine Unterlegscheibe (wie im Link angegeben); oder einfach ersetzen manuell die Liste der Objekte, die Sie unterstützen:
var entities = {"<" : "lt", ">" : "gt", "&" : "amp" };
var re = /[<>&]/g;
In diesem Fall müssen Sie erinnern in beiden entities
und re
Variablen ein neues Objekt, das Sie in Zukunft unterstützen wollen hinzuzufügen; Object.keys
helfen nur bei der Wartung.
Fehle ich etwas oder ist Regex dafür wie mit einem Vorschlaghammer auf einem Finish Nagel? –
Wahrscheinlich möchten Sie auch 'code = code.replace (/ &/g, '&')' 'schreiben - sogar vor den' <' and '>' Schritten. – ruakh
@BradChristie - Wie sonst würdest du es tun? String Replacement findet nur den allerersten. Glaubst du wirklich 'code.split ('>'). Join ('>')' ist besser? –