我需要确定HTML元素是否嵌套在绝对定位的元素内。 (1)*

例如我可以做这个:

function hasAbsoluteAncestor(obj){
  while(obj != null){
    if(window.getComputedStyle(obj,null).position == 'absolute'){
      return true;
    } else {
      obj = obj.offsetParent;
    }
  }
  return false;
}
//yes I'm aware IE doesn't play by the W3C game here...  but I have a separate
//IE fix to enable this method in IE
//I'm also aware the above checks the "test" element too (ignore that for now)


但是测试罕见的情况似乎相当昂贵。我猜95%的时间它将是相对要素树。

是否有任何迹象表明元素嵌套在这样的层次结构中?任何人都知道的简洁技巧?

更新:基于Peter关于过早优化的评论,我更改了逻辑以返回坐标以返回2对...直到根的一对,第一对绝对定位的父对。它仍然“感到”肮脏,但似乎对性能没有任何重大影响。

(1)*为什么需要这个?我在被测试的元素下面添加了一个新的绝对定位元素,设置了.left和.top属性...(如果一个祖先是绝对定位的,则是该祖先的偏移量,而不是身体/视口的偏移量,因此我需要知道我是否需要将被测元素的位置作为坐标,以相对于身体或特定祖先为代表。

最佳答案

“似乎”还算贵吗?在我看来,这听起来像是过早的优化。

你知道那很贵吗?你测试过了吗?

实际上,我敢打赌它并不昂贵。即使在具有非常深节点的非常复杂的HTML页面上,我们在这里谈论的是30次迭代? 40吗

恕我直言,请在需要时进行优化-即当您的测试表明存在问题时。

关于javascript - 在javascript中,有没有一种快速的方法来确定祖先节点是否绝对定位而无需遍历整棵树?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/940870/

10-11 20:03