我正在使用jQuery的.text()
和.html()
方法并运行some simple jsPerf tests,当时我惊讶地发现.html()
快了近一个级别在检索文本时:
$div.text()
- 88,496 ops / sec $div.html()
- 592,028 ops / sec 为什么.text()
在结果相同时比.html()
慢得多? .text()
执行.html()
会执行哪些操作来解释这种差异?
我知道每种方法都有不同的目的;我很好奇他们用于相同目的的情况。
答案 0 :(得分:21)
它与所需的解析量有关。 .text()
速度较慢,因为它必须解析内部HTML并删除任何内部标记。 .html()
只是抓住(或者,如果你正在设置内容,将其删除)那些已经完成的任务。
您可以看到the source for .text()
here(第123-144行)和the source for .html()
here(第404-441行)。如果只是获取(未设置)值,.text()
会有递归,但.html()
执行简单的return elem.innerHTML;
,因此速度更快。即使将其用作制定者,.html()
也更简单。
另请注意:即使您同时使用两者作为设置者并仅传递纯文本,.html()
也会更快;使用elem.nodeType
时,浏览器仍需确定.text()
。这实际上需要解析字符串。