gpt4 book ai didi

javascript - javascript中有没有一种快速的方法来确定祖先节点是否绝对定位而无需遍历整棵树?

转载 作者:太空宇宙 更新时间:2023-11-03 19:24:30 25 4
gpt4 key购买 nike

我需要确定 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 对 (x,y)直到根,另一对是第一个绝对定位的 parent 。它仍然“感觉”不干净,但似乎对性能没有任何重大影响。

(1)* 我为什么需要这个?我在被测试元素下方添加一个新的绝对定位元素,设置 .left 和 .top 属性...其中 (if) 祖先是绝对定位的,是从那个祖先偏移,而不是从 body /视口(viewport)偏移因此我需要知道我是否需要测试元素的位置作为坐标,相对于 body 或特定祖先。

最佳答案

“似乎”相当昂贵?对我来说,这听起来很像过早的优化。

你知道它很贵吗?你测试过吗?

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com