59 javascript dom
问题是,使用innerHTML比较concatination并将文本节点附加到现有节点.现场背后发生了什么?
到目前为止我对此的看法:
我希望你们有人能为我解决这个问题,谢谢!
T.J*_*der 90
后者(appendChild)不会导致DOM的完全重建,甚至不会导致目标中的所有元素/节点.
前者(设置innerHTML)确实会导致目标元素内容的完全重建,如果您没有附加,则不需要.
追加通过innerHTML += content使浏览器遍历元素中的所有节点,构建HTML字符串以提供给JavaScript层.然后,您的代码会向其附加文本并设置innerHTML,从而导致浏览器删除目标中的所有旧节点,重新解析所有HTML,并构建新节点.所以从这个意义上讲,它可能效率不高.(但是,解析HTML就是浏览器所做的事情,而且它们确实非常快速.)
设置innerHTML确实使您可能持有的目标元素中的元素的任何引用无效 - 因为这些元素不再存在,您删除它们然后在设置时放入新的元素(看起来非常相似)innerHTML.
简而言之,如果你要追加,我会使用appendChild(或者insertAdjacentHTML,见下文).如果你要替换,那么有一些非常有效的情况,使用innerHTML是比通过DOM API自己创建树更好的选择(速度是其中的主要).
最后,值得一提的是insertAdjacentHTML,这是一个可以用来使用HTML字符串将节点和元素插入到元素中或旁边的函数.您可以使用它附加到元素:theElement.insertAdjacentHTML("beforeend", "the HTML goes here");第一个参数是放置HTML的位置; 你的选择是"beforebegin"(在元素之外,在它之前),"afterbegin"(在元素内部,在开头),"beforeend"(在元素内部,在结尾处),和"afterend"(在元素之外,仅在它之后).注意"afterbegin"并"beforeend"插入元素本身,"beforebegin"然后"afterend"插入元素的父元素.在所有主流桌面浏览器的支持下,我不知道移动支持有多好(虽然我确定iOS Safari和Android 2.x及以上版本都有),但垫片很小.
我在innerHTML和appendChild之间进行了性能比较,创建了一个小小的要点.
最后一个胜利很大
https://gist.github.com/oliverfernandez/5619180
| 归档时间: |
|
| 查看次数: |
30249 次 |
| 最近记录: |