DOM的“非现场”副本进行操作

时间:2012-02-16 21:03:31

标签: javascript dom

我最近观看过Nicholas Zakas关于高性能脚本的视频。这个是关于回流和重画。他说不断回流正在改变布局,改变尺寸等是不好的。

我回答了一个关于Transfer overflow from one div to another的问题 - 我做了什么来“溢出”溢出的内容到另一个div:

  1. 测量内部和外部容器的高度(目前,我使用jQuery.height())
  2. 检查内部是否大于外部
  3. 如果小于(没有溢出),则结束脚本
  4. 如果更大(溢出),则弹出内部容器中的最后一个字符并添加到下一个div
  5. 将文本放回内部容器中(导致重排 - 重新计算高度)
  6. 回到第1步
  7. 问题是我正在移除和附加字符,并测量每个“字符弹出”容器外溢出的容器的高度。它也会在每次迭代时重新渲染 - 这使得它有时会非常慢。

    有没有办法让DOM的JS副本进行操作,检查高度等?我正在寻找的就像是页面的克隆。我听说过DOM片段,但在将它们放入DOM之前,它只是节点的容器。

1 个答案:

答案 0 :(得分:1)

在考虑创建DOM的副本时,以下方法可能很有用:

这些方法对于DOM结构非常有用,但不幸的是,它们不会返回维度的有用值。

必须渲染元素。这可以通过创建<iframe>元素并在其中插入文档(节点)来完成。前面提到的方法可用于此目的:创建文档(的一部分)的有效副本,并将文档插入iframe。

<head>中插入<base>元素可能也很有用,这样才能正确解析网址和图片。