如何使用jQuery遍历所有父元素

时间:2011-12-28 03:02:24

标签: jquery

所以我有一个我需要调用.width和.height的图像但是我遇到了老问题,如果任何父元素不可见,IE返回0。

由于此特定任务的动态特性,无法在设计时告知哪些元素可见。因此,我的解决方案是获取我的图像元素,然后一次向上移动元素层次结构,如果不是,则将其设置为可见。如果我将它设置为可见,我将把元素id添加到数组中,所以我知道在得到宽度/高度后哪些要翻转回隐藏。

所以我的问题是:我如何编写一个递归的jQuery函数进入元素树并检查元素是否隐藏?

1 个答案:

答案 0 :(得分:6)

无需任何递归,您可以更轻松地做到这一点:

var hiddenElements = $(yourelement).parents().filter(':hidden').show();

而不是.filter(':hidden')你也可以使用.not(':visible') - 但这只是风格问题。


然而,为什么不简单地这样做 - 它会避免令人烦恼的元素闪烁,这些元素会在短时间内显示出来,只是为了再次隐藏。除此之外,图像已经被缓存,因此克隆它不会导致任何明显的延迟(或任何额外的网络流量)。

var clone = $(yourelement).clone().appendTo('#dummy');
// now get the size
clone.remove();

为了防止克隆闪烁到可见性,样式#dummy如下:

#dummy { position: absolute; left: -1000em; }

这会隐藏它而不会让它变得不可见。