最初のアプローチは、変数を新しい値に設定するだけで、要素に値を書き込まないため、機能しません。この線
var innerText = d.innerText || d.textContent;
...変数innerText
を検出したテキストプロパティの値に設定します。実際のプロパティ自体への参照ではありません。
ブランチを実行する必要があります。例:
var d = document.getElementById('d');
var msg = "new text";
if ("innerText" in d) {
d.innerText = msg;
}
else {
d.textContent = msg;
}
その機能-ブラウザが使用しているかどうか、innerText
またはtextContent
要素のプロパティの存在を検索することによって検出します(これは、in
オペレータが行うことです。オブジェクトに指定された名前のプロパティがあるかどうかを確認します。そのプロパティが空白、、などの場合でも同様null
ですundefined
。 )。
あなたはそれのためにあなた自身に関数を書くことさえできます:
var setText = (function() {
function setTextInnerText(element, msg) {
element.innerText = msg;
}
function setTextTextContent(element, msg) {
element.textContent = msg;
}
return "innerText" in document.createElement('span') ? setTextInnerText : setTextTextContent;
})();
これにより、機能の検出が1回行われ、適切なエンジンがインライン化される関数が返されます。
または、メッセージ内のHTMLマークアップを(文字通りのテキストではなく)マークアップとして処理する場合は、innerHTML
(ブラウザー間で一貫している)を使用できます。ただし、を使用するinnerHTML
と、マークアップが処理されますが、これは希望どおりでない場合があります。
jQuery、YUI、Closure、またはその他のいくつかのブラウザーの違いに対処するために(そして、さらに多くの便利な機能を提供するために)、優れたJavaScriptライブラリーを使用すると便利だと思います。明らかに、図書館なしではできないことは何もありません。それは、すでに膨大な量の仕事をした人々の肩に立つことの問題です。:-)
この場合、たとえば、jQueryを使用すると、上記は次のようになります。
$("#d").text("new text");
それでおしまい。