DIV要素内のテキストを動的に設定する必要があります。ブラウザで安全な最善の方法は何ですか? prototypejsとscriptaculousが利用可能です。
<div id="panel">
<div id="field_name">TEXT GOES HERE</div>
</div>
これが関数の外観です。
function showPanel(fieldName) {
var fieldNameElement = document.getElementById('field_name');
//Make replacement here
}
私はPrototypeのプレーンテキスト、HTMLスニペット、またはupdate
メソッドを定義するJavaScriptオブジェクトをサポートするtoString
メソッドを使用します。
$("field_name").update("New text");
あなたは単に使用することができます:
fieldNameElement.innerHTML = "My new text!";
2013年以降にこれを読んでいるすべての人のために更新されました:
この答えにはたくさんのSEOがありますが、すべての答えは非常に古くなっており、現在のすべてのブラウザがそのまま使えるようにライブラリに依存しています。
div要素内のテキストを置き換えるには、現在のすべてのブラウザで提供されているNode.textContentを使用してください。
fieldNameElement.textContent = "New text";
function showPanel(fieldName) {
var fieldNameElement = document.getElementById("field_name");
while(fieldNameElement.childNodes.length >= 1) {
fieldNameElement.removeChild(fieldNameElement.firstChild);
}
fieldNameElement.appendChild(fieldNameElement.ownerDocument.createTextNode(fieldName));
}
このようにすることの利点:
もし私がJavaScriptライブラリを使うつもりなら、私はjQueryを使いたいです、そしてこれをします:
$("div#field_name").text(fieldName);
@ AnthonyWJonesのコメント が正しいことに注意してください。 "field_name"は特に説明的なIDでも変数名でもありません。
$('field_name').innerHTML = 'Your text.';
Prototypeの優れた機能の1つは、$('field_name')
がdocument.getElementById('field_name')
と同じことをするということです。これを使って! :-)
Prototypeのupdate
関数を使用したJohn Topleyの回答は別の良い解決策です。
簡単な答えはinnerHTML(またはプロトタイプのupdateメソッドでもほぼ同じ)を使用することです。 innerHTMLの問題は、割り当てられているコンテンツをエスケープする必要があることです。ターゲットによっては、他のコードでそれを行う必要があります。
iEでは: -
document.getElementById("field_name").innerText = newText;
fFで: -
document.getElementById("field_name").textContent = newText;
(実際にはFFのコードでは以下の通りです)
HTMLElement.prototype.__defineGetter__("innerText", function () { return this.textContent; })
HTMLElement.prototype.__defineSetter__("innerText", function (inputText) { this.textContent = inputText; })
可能な限り幅広いブラウザサポートが必要な場合は、innerTextを使用できます。これは完全な解決策ではありませんが、rawでinnerHTMLを使用しているわけではありません。
あなたが本当にあなたが中断したところから続けてほしいのなら、あなたはそうすることができます:
if (fieldNameElement)
fieldNameElement.innerHTML = 'some HTML';
nodeValueは、使用できる標準のDOMプロパティでもあります。
function showPanel(fieldName) {
var fieldNameElement = document.getElementById(field_name);
if(fieldNameElement.firstChild)
fieldNameElement.firstChild.nodeValue = "New Text";
}
el.innerHTML='';
el.appendChild(document.createTextNode("yo"));
あなたのサイトでたくさんのJavaScriptを使い始めるのであれば、jQueryはDOMを使うことを非常に簡単にします。
http://docs.jquery.com/Manipulation
$( "#field-name")。text( "Some text");と同じくらい単純にします。
構造を仮定できない場合はinnerTextを使用します - 既存のテキストを更新するためにText#dataを使用します Performance Test
function showPanel(fieldName) {
var fieldNameElement = document.getElementById(field_name);
fieldNameElement.removeChild(fieldNameElement.firstChild);
var newText = document.createTextNode("New Text");
fieldNameElement.appendChild(newText);
}
これは簡単な jQuery のやり方です:
var el = $('#yourid .yourclass');
el.html(el.html().replace(/Old Text/ig, "New Text"));