如何替换div元素内的文本?
时间:2020-03-06 14:36:24 来源:igfitidea点击:
我需要动态设置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 }
解决方案
$('field_name').innerHTML = 'Your text.';
原型的妙处之一是$('field_name')与document.getElementById('field_name')具有相同的作用。用它! :-)
约翰·托普利(John Topley)使用原型的"更新"功能的答案是另一个很好的解决方案。
我们可以简单地使用:
fieldNameElement.innerHTML = "My new text!";
如果我们真的希望我们从我们上次中断的地方继续,则可以执行以下操作:
if (fieldNameElement) fieldNameElement.innerHTML = 'some HTML';
我将使用Prototype的update方法,该方法支持纯文本,HTML代码段或者定义了toString方法的任何JavaScript对象。
$("field_name").update("New text");
- Element.update文档
function showPanel(fieldName) { var fieldNameElement = document.getElementById(field_name); fieldNameElement.removeChild(fieldNameElement.firstChild); var newText = document.createTextNode("New Text"); fieldNameElement.appendChild(newText); }
快速的答案是使用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,但这不是一个完整的解决方案,但也没有在原始文件中使用innerHTML。
function showPanel(fieldName) { var fieldNameElement = document.getElementById("field_name"); while(fieldNameElement.childNodes.length >= 1) { fieldNameElement.removeChild(fieldNameElement.firstChild); } fieldNameElement.appendChild(fieldNameElement.ownerDocument.createTextNode(fieldName)); }
这样做的好处:
- 它仅使用DOM,因此该技术可移植到其他语言,并且不依赖于非标准的innerHTML
- fieldName可能包含HTML,这可能是XSS攻击未遂。如果我们知道它只是文本,那么我们应该创建一个文本节点,而不是让浏览器将其解析为HTML。
如果要使用javascript库,请使用jQuery,并执行以下操作:
$("div#field_name").text(fieldName);
请注意,@ AnthonyWJones的注释是正确的:" field_name"不是特别描述性的ID或者变量名。
如果我们打算在站点上开始使用大量JavaScript,则jQuery使使用DOM变得非常简单。
http://docs.jquery.com/操作
使它变得简单:
$("#field-name")。text("一些新文本。");
这是一种简单的jQuery方式:
var el = $('#yourid .yourclass'); el.html(el.html().replace(/Old Text/ig, "New Text"));
nodeValue也是我们可以使用的标准DOM属性:
function showPanel(fieldName) { var fieldNameElement = document.getElementById(field_name); if(fieldNameElement.firstChild) fieldNameElement.firstChild.nodeValue = "New Text"; }