如何替换div元素中的文本?

时间:2008-09-23 15:39:40

标签: javascript html dom

我需要动态设置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
}

14 个答案:

答案 0 :(得分:239)

您可以简单地使用:

fieldNameElement.innerHTML = "My new text!";

答案 1 :(得分:151)

更新了2013年及以后阅读此内容的所有人:

这个答案有很多搜索引擎优化,但所有答案都严重过时,并依赖图书馆来做所有当前浏览器开箱即用的事情。

To replace text inside a div element, use Node.textContent, which is provided in all current browsers.

fieldNameElement.textContent = "New text";

答案 2 :(得分:74)


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解析它
  3. 如果我打算使用javascript库,我会使用jQuery,并执行此操作:

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

    请注意@AnthonyWJones' comment是正确的:“field_name”不是特别描述性的ID或变量名称。

答案 3 :(得分:46)

我会使用Prototype的update方法,该方法支持纯文本,HTML代码段或定义toString方法的任何JavaScript对象。

$("field_name").update("New text");

答案 4 :(得分:17)

$('field_name').innerHTML = 'Your text.';

Prototype的一个漂亮功能是$('field_name')document.getElementById('field_name')做同样的事情。用它! : - )

John Topley使用Prototype update函数的答案是另一个很好的解决方案。

答案 5 :(得分:15)

快速回答是使用innerHTML(或原型的更新方法,这几乎是一样的)。 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。

答案 6 :(得分:6)

如果你真的希望我们继续你离开的地方,你可以这样做:

if (fieldNameElement)
    fieldNameElement.innerHTML = 'some HTML';

答案 7 :(得分:4)

nodeValue也是您可以使用的标准DOM属性:

function showPanel(fieldName) {
  var fieldNameElement = document.getElementById(field_name);
  if(fieldNameElement.firstChild)
    fieldNameElement.firstChild.nodeValue = "New Text";
}

答案 8 :(得分:3)

el.innerHTML='';
el.appendChild(document.createTextNode("yo"));

答案 9 :(得分:1)

如果您倾向于开始在您的网站上使用大量JavaScript,那么jQuery使得使用DOM非常简单。

http://docs.jquery.com/Manipulation

使其简单如下: $(“#field-name”)。text(“some new text。”);

答案 10 :(得分:1)

如果您不能假设结构,请使用innerText - 使用Text#data更新现有文本 Performance Test

答案 11 :(得分:0)

function showPanel(fieldName) {
  var fieldNameElement = document.getElementById(field_name);

  fieldNameElement.removeChild(fieldNameElement.firstChild);
  var newText = document.createTextNode("New Text");
  fieldNameElement.appendChild(newText);
}

答案 12 :(得分:0)

这是一种简单的jQuery方式:

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

el.html(el.html().replace(/Old Text/ig, "New Text"));

答案 13 :(得分:0)

在HTML中放入

<div id="field_name">TEXT GOES HERE</div>

在Javascript中放这个

var fieldNameElement = document.getElementById('field_name');
        if (fieldNameElement)
        {fieldNameElement.innerHTML = 'some HTML';}