【发布时间】:2013-06-16 06:15:35
【问题描述】:
所以我一直在慢慢地用原生 javascript 替换很多我的普通 jQuery 代码,我碰巧遇到了 document.createTextNode() 和 related MDN documentation。阅读后我有点困惑什么是文本节点。
我知道它可以用来将文本放入div's,但我确信它不仅仅是“用它来将单词放入元素中”。 Looking at this, 看来文本节点也可以引用属性文本。
谁能提供更多关于文本节点是什么以及它的用途的定义?除了像这样的基本东西之外,它还有实际用途吗?
var div = document.createElement('div');
var text = document.createTextNode('Y HALO THAR');
div.appendChild(text);
【问题讨论】:
-
大部分情况下,在 innerHTML 可靠运行之前,我们就是这样构建动态 HTML 的。
-
我只想指出,虽然使用 document.createElement、appendChild 和 createTextNode 等大型树循环可能感觉更“原生”,但在宏级别执行此操作时,innerHTML实际上可以更快(但在某些情况下存在安全风险,正如 Xotic 所说)。逻辑是调用 innerHTML 一次将信息直接传递给专门的 C++ 解析器,而手动创建/追加是在 Javascript 引擎中进行手动工作;它们很快,但仍不如浏览器的代码那么快。
-
@Katana 关于不同方法的性能,请参阅jsperf
-
见Security considerations of innerHTML,createTextNode 没有这个问题。
-
@Katana314 - 实际上也存在使用 createDocumentFragment 和 cloneNode 比 innerHTML 快得多的情况,如果您要创建数千个具有相同结构的节点(例如制作 DOM 数字行或其他东西)更快地创建一个documentFragment,将一百个左右的元素附加到它并克隆该documentFragment 很多次。 DocumentFragments 和 cloneNode 性能非常好。
标签: javascript html textnode