私は 'code'要素の 'innerHTML'を素早く置き換えようとしています。私はこれがうまくいくと思いました:RegExとJavaScriptに置き換えてください
情報をブラウザに戻したり、データタイプを変換したりするために追加の手順を実行する必要がありますか?あるいは、私は 'RegEx'と 'innerHTML'の仕組みが完全に間違っていますか?私は事前にフィードバックを感謝します。
私は 'code'要素の 'innerHTML'を素早く置き換えようとしています。私はこれがうまくいくと思いました:RegExとJavaScriptに置き換えてください
情報をブラウザに戻したり、データタイプを変換したりするために追加の手順を実行する必要がありますか?あるいは、私は 'RegEx'と 'innerHTML'の仕組みが完全に間違っていますか?私は事前にフィードバックを感謝します。
、:
var code = document.getElementsByTagName('code').innerHTML;
document.getElementsByTagNameは、の要素のリストを返します。したがって、目的がページ内にあるすべてタグcode
タグをエスケープしている場合は、それらを反復する必要があります。 次に、textContent
(サポートされている場合)または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;
}
か、新しいテキストノードを作成:
var codes = document.getElementsByTagName("code");
for (var i = 0, code, html; code = codes[i++];) {
html = code.innerHTML;
code.innerHTML = "";
code.appendChild(document.createTextNode(html));
}
すべてのHTMLエンティティをエスケープする必要があります。あなたのコード内
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);
}
})()
そして:あなたはまだ正規表現を使用したい場合は、多分、フォールバックとして、あなたはこのような機能を持つことができます
code.innerHTML = escapeEntities(code.innerHTML);
注Object.keysがサポートされていない場合は、あなたができることシムを簡単に使用する(リンクに記載されているように)。あるいは単に手動でエンティティのリストを置き換えるあなたのサポート:あなたは両方entities
とre
変数にあなたが将来的にサポートする新しいエンティティを追加することを忘れないでくださいする必要があり、その場合には
var entities = {"<" : "lt", ">" : "gt", "&" : "amp" };
var re = /[<>&]/g;
。 Object.keys
はメンテナンスに役立ちます。
CSSでブロック全体をスタイルすることができます。だからあなたは 'code {background:silver; border:1px solid grey} '等 – ZER0
私にあなたにこれを聞かせてください。私がテキストに変換できたら、私はまだCSSでそれをスタイルすることができますか? –
私はそれを試してみると思います。奥深い説明をありがとうございました –
使用の割り当て:このような
code = code.replace(codeExam1, '<');
code = code.replace(codeExam2, '>');
そして、あなたのコードを変更:
function codeDisplay () {
var codeArray = document.getElementsByTagName('code');
var codeExam1 = new RegExp('<', 'gm');
var codeExam2 = new RegExp('>', 'gm');
for (var i = 0 ; i < codeArray.length ; ++i){
var code = codeArray[i].innerHTML;
code.replace(codeExam1, '<');
code.replace(codeExam2, '>');
codeArray[i].innerHTML = code;
}
}
が戻って結果を含む新しい文字列を交換してください。例えば、MDNを参照してください。 (しかし、私の意見では、単に読みやすさのコストで、さらに短くすることができる)
function codeDisplay () {
var code = document.getElementsByTagName('code').innerHTML;
var codeExam1 = new RegExp('<', 'gm');
var codeExam2 = new RegExp('>', 'gm');
code = code.replace(codeExam1, '<');
code = code.replace(codeExam2, '>');
document.getElementsByTagName('code').innerHTML = code;
}
か短いバージョン:
function codeDisplay () {
var code = document.getElementsByTagName('code').innerHTML;
code = code.replace(/</gm , '<')
.replace(/>/gm, '>');
document.getElementsByTagName('code').innerHTML = code;
}
は実際にあなたのコードはこのように見えることがある
code
の内容を置換するには
これを試してみてください:すべてのfoの最初だから、
function codeDisplay () {
var s = document.getElementsByTagName('code').innerHTML;
s = s.replace(/\</g,'<');
s = s.replace(/\>/g,'>');
document.getElementsByTagName('code').innerHTML = s;
}
仕上げ爪にスレッジハンマーを使用するようなものがありますか、それとも正規表現ですか? –
おそらく、 '<' and '>'のステップの前であっても 'code = code.replace(/&/ g、 '&')'と書いておきたいでしょう。 – ruakh
@ブラッドクリスティ - それ以外の方法は?文字列の置換は最初の文字列のみを検索します。あなたは本当に 'code.split( '>')。join( '>')'の方が良いと思いますか? –