当前位置:  开发笔记 > 编程语言 > 正文

innerHTML的替代方案?

如何解决《innerHTML的替代方案?》经验,为你挑选了5个好方法。

我想知道是否有办法在不使用innerHTML的情况下更改HTML中的任何内容.

我问的原因是因为它对W3C有点不满意.我知道这是挑剔,但我只是想知道,有办法吗?

编辑:人们似乎误解了我在这里问的问题:我想找到一种方法来有效地改变正在显示的文本.

如果我有:

One

innerHTML允许我这样做:

var text = document.getElementsById("one");
text.innerHTML = "Two";

我屏幕上的文字会发生变化.
我不想附加更多文字,我希望改变现有的文字.



1> Turnor..:

推荐的方法是通过DOM操作,但它可能非常冗长.例如:

// 

Hello, World!

var para = document.createElement('p'); para.appendChild(document.createTextNode('Hello, ')); // var b = document.createElement('b'); b.appendChild(document.createTextNode('World'); para.appendChild(b); para.appendChild(document.createTextNode('!')); // Do something with the para element, add it to the document, etc.

编辑

为了响应您的编辑,为了替换当前内容,您只需删除现有内容,然后使用上面的代码填写新内容.例如:

var someDiv = document.getElementById('someID');
var children = someDiv.childNodes;
for(var i = 0; i < children.length; i++)
    someDiv.removeChild(children[i]);

但正如其他人所说的那样,我建议使用类似jQuery的东西,因为并非所有浏览器都完全支持DOM,而那些确实存在由JavaScript库内部处理的怪癖.例如,jQuery看起来像这样:

$('#someID').html("

Hello, World!

");


jQuery在代码中多次使用innerHTML,因此建议使用jQuery以避免使用innerHTML对IMHO没有多大意义.
其他方式:)他们的观点是,使用innerHTML,可以将无效标记插入XML/XHTML文档.尽管如此,他们似乎已经用HTML5改变了主意.

2> Andrew Hare..:

更好的方法是使用document.createTextNode.使用此函数的主要原因之一innerHTML是,所有HTML字符转义都将为您处理,而如果您只是设置,则必须自己转义字符串innerHTML.


但是,似乎innerHTML比W3C DOM方法快得多:http://www.quirksmode.org/dom/innerhtml.html.
这取决于你在做什么; 说一种方法更好的方法是误导的.当对许多元素进行childNode列表操作时,DOM往往会变慢(趋向于O(n²)),而innerHTML可以一次完成所有这些操作.但是innerHTML的解析/序列化步骤可以使其他操作变慢.

3> Bill the Liz..:

您可以通过操纵DOM获得相同的效果.更改文本的最安全方法是删除元素的所有子节点,并用新的文本节点替换它们.

var node = document.getElementById("one");

while( node.firstChild )
    node.removeChild( node.firstChild );
node.appendChild( document.createTextNode("Two") );

在用新文本替换之前,删除子节点会删除元素的文本内容.

大多数开发人员避免使用innerHTML的原因是通过DOM访问元素符合标准.



4> Ionuț G. Sta..:

如果您只想更改纯文本,那么有一个更快的解决方案依赖于标准:

document.getElementById("one").firstChild.data = "two";

无论如何,请注意innerHTML将成为即将推出的HTML 5标准的一部分.



5> 小智..:

简单.

替换text.innerHTML = 'two'text.firstChild.nodeValue = 'two'.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有