所以我有一个我需要调用.width和.height的图像但是我遇到了老问题,如果任何父元素不可见,IE返回0。
由于此特定任务的动态特性,无法在设计时告知哪些元素可见。因此,我的解决方案是获取我的图像元素,然后一次向上移动元素层次结构,如果不是,则将其设置为可见。如果我将它设置为可见,我将把元素id添加到数组中,所以我知道在得到宽度/高度后哪些要翻转回隐藏。
所以我的问题是:我如何编写一个递归的jQuery函数进入元素树并检查元素是否隐藏?
答案 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; }
这会隐藏它而不会让它变得不可见。