有效地获得每个DOM元素的偏移

时间:2015-09-08 20:00:17

标签: javascript jquery dom

为了确定页面上各个位置的页边距,我需要得到每个DOM元素的偏移量,宽度和高度。

我以递归方式遍历DOM元素并保存每个元素的属性。 我尝试使用JQuery $(el).offset(),但速度非常慢。我想使用$(...)为每个元素创建一个JQuery对象非常慢。

然后,我尝试了一个旧的实现,我从使用原生JS的旧代码中获得了它,它的速度提高了X4倍。

所以我真正想问的是,有不同的方法来实现这一目标吗? 我应该提一下,我的脚本在发布者的网站上运行,我对我正在运行的页面一无所知。

1 个答案:

答案 0 :(得分:0)

我想这是一个解决方案,使用map()getBoundingClientRect()

var elements = document.getElementsByClassName('someclass');

elements.map(function(val, i, arr) {

  var doc = document.getBoundingClientRect(),
      el = val.getBoundingClientRect(),
      coordsX = el.left - doc.left,
      coordsY = el.top - doc.top;

  return {x: coordsX, y: coordsY};
});

这将返回给定类的所有坐标的数组。如果document.getElementsByClassName更符合您的需求,您可以将querySelector更改为getBoundingClientRect()

这也会将var MySchema= new mongoose.Schema({ name: {type:String, required: true} isClever: { type: Boolean, default: false } }); 更改为相对于文档而不是视口。