1

我正在尝试使我的代码更具可重用性。

目前我正在使用:

var top_element = document.getElementById('main');

document.body.insertBefore(lightbox_overlay, top_element);
document.body.insertBefore(lightbox_border, lightbox_overlay);
document.body.insertBefore(lightbox_content, lightbox_border);

我想使用一个数组并遍历这些项目来做到这一点,但是:

var lightbox_elements = [];

lightbox_elements.push(lightbox_overlay, lightbox_border, lightbox_content);

任何想法下一步是什么?必须是纯 JS ..

谢谢 :)

4

1 回答 1

3

我可能会在你的数组上使用documentFragmentand 。forEach

var frag = document.createDocumentFragment();

[ lightbox_overlay,
  lightbox_border,
  lightbox_content ].forEach(function(el) { frag.appendChild(el); });

document.body.insertBefore(frag, top_element);

您可以使用 MDN 提供的补丁来填充旧浏览器。


这是另一个使用的解决方案.reduce()

[ lightbox_overlay,
  lightbox_border,
  lightbox_content ].reduce(function(prev, curr) { 
                               return document.body.insertBefore(curr, prev); 
                            }, top_element);

由于prev始终是最后一个返回值(或第一次迭代的种子值),并且由于insertBefore返回curr插入的项目,因此对于每次迭代,prev始终是最后一个curr

于 2012-06-05T18:22:02.010 回答