186

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
}
4

14 に答える 14

273

以下を簡単に使用できます。

fieldNameElement.innerHTML = "My new text!";
于 2008-09-23T15:41:08.070 に答える
209

2013年以降にこれを読んでいるすべての人のために更新されました:

この回答には多くのSEOがありますが、すべての回答は非常に時代遅れであり、現在のすべてのブラウザーがそのまま使用できることをライブラリに依存しています。

div 要素内のテキストを置き換えるには、現在のすべてのブラウザーで提供されている Node.textContent を使用します。

fieldNameElement.textContent = "New text";
于 2013-09-10T15:30:02.337 に答える
78

function showPanel(fieldName) {
  var fieldNameElement = document.getElementById("field_name");
  while(fieldNameElement.childNodes.length >= 1) {
    fieldNameElement.removeChild(fieldNameElement.firstChild);
  }
  fieldNameElement.appendChild(fieldNameElement.ownerDocument.createTextNode(fieldName));
}

このようにする利点:

  1. DOM のみを使用するため、この手法は他の言語に移植可能であり、非標準の innerHTML に依存しません。
  2. fieldName には HTML が含まれている可能性があり、これは XSS 攻撃の試みである可能性があります。それが単なるテキストであることがわかっている場合は、ブラウザーに HTML として解析させるのではなく、テキスト ノードを作成する必要があります。

JavaScript ライブラリを使用する場合は、jQuery を使用して次のようにします。


  $("div#field_name").text(fieldName);

@AnthonyWJones のコメントは正しいことに注意してください。「field_name」は、特に説明的な ID または変数名ではありません。

于 2008-09-23T15:52:00.383 に答える
50

updateプレーン テキスト、HTML スニペット、またはメソッドを定義する任意の JavaScript オブジェクトをサポートするプロトタイプのメソッドを使用しますtoString

$("field_name").update("New text");
于 2008-09-23T15:46:04.377 に答える
18
$('field_name').innerHTML = 'Your text.';

Prototype の気の利いた機能の 1 つは$('field_name')、 と同じことを行うことdocument.getElementById('field_name')です。これを使って!:-)

updatePrototype の関数を使用した John Topley の回答は、もう 1 つの優れたソリューションです。

于 2008-09-23T15:41:01.563 に答える
17

簡単な答えは、innerHTML (またはほとんど同じことのプロトタイプの update メソッド) を使用することです。innerHTML の問題は、割り当てられているコンテンツをエスケープする必要があることです。ターゲットによっては、他のコードでそれを行う必要があります OR

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 を使用できます。これは完全なソリューションではありませんが、生で innerHTML を使用することもありません。

于 2008-09-23T15:48:50.483 に答える
7

中断したところから続行したい場合は、次のようにすることができます。

if (fieldNameElement)
    fieldNameElement.innerHTML = 'some HTML';
于 2008-09-23T15:41:25.383 に答える
6

nodeValue は、使用できる標準の DOM プロパティでもあります。

function showPanel(fieldName) {
  var fieldNameElement = document.getElementById(field_name);
  if(fieldNameElement.firstChild)
    fieldNameElement.firstChild.nodeValue = "New Text";
}
于 2010-07-26T21:17:11.403 に答える
4
el.innerHTML='';
el.appendChild(document.createTextNode("yo"));
于 2011-11-24T17:07:03.290 に答える
2

サイトで大量の JavaScript を使用する傾向がある場合、jQuery を使用すると DOM を非常に簡単に操作できます。

http://docs.jquery.com/Manipulation

次のようにシンプルにします: $("#field-name").text("Some new text.");

于 2008-09-23T15:53:48.647 に答える
0
function showPanel(fieldName) {
  var fieldNameElement = document.getElementById(field_name);

  fieldNameElement.removeChild(fieldNameElement.firstChild);
  var newText = document.createTextNode("New Text");
  fieldNameElement.appendChild(newText);
}
于 2008-09-23T15:47:59.067 に答える
0

簡単なjQueryの方法は次のとおりです。

var el = $('#yourid .yourclass');

el.html(el.html().replace(/Old Text/ig, "New Text"));
于 2010-02-24T13:22:35.500 に答える