为什么尚未添加到DOM的tr
元素在jQuery中被视为可见,但div
不是?
$('<tr></tr>').is(':visible') // returns true
$('<div></div>').is(':visible') // returns false
我正在使用jQuery 1.4.2。我在Firefox 5,IE 9,Chrome 12和Safari 5以及Opera 11.5中进行了测试。
解决
我已经编写了一个在我的应用程序中使用的解决方法,直到我可以升级到更新版本的jQuery:
$('<tr></tr>').is('body *:visible') // returns false
$('<div></div>').is('body *:visible') // returns false
感谢所有人的帮助!
答案 0 :(得分:2)
visible
并不意味着你可以亲眼看到它。例如,即使你的眼睛闭合,它仍然是真的。
节点本身没有概念,浏览器只渲染一个 DOM树。
它没有设置属性,因此HTML浏览器会将其视为“不可见”,因此它是“可见的”......即使它不是浏览器实际渲染的一个节点树的一部分。
您可能还会问$('<b>Bold text</b>')
如果无法看到iframe
可能是粗体,或者任何图形格式。
可以认为元素是隐藏的 有几个原因:
- CSS显示值为none。
- 它们是type =“hidden”的表单元素。
- 它们的宽度和高度明确设置为0.
- 隐藏了一个祖先元素,因此页面上不会显示该元素。
显然,这里没有一个是真的。
我无法解释为什么Dunhamzzz能够产生不同的结果!它可能与小提琴运行的tr
有某种关系。
好的,jsfiddle.net has nothing to do with it。
然而,I can reproduce this with 1.4.2。
所以他们中的一个或两个都是错的。鉴于div
与{{1}}的行为不一致,我建议1.4.2不正确(有a number of hidden-item-related changes in 1.4.4)并且文档具有误导性。
答案 1 :(得分:0)
做一个小提琴,both are false for me.这是可以预期的,因为它们尚未被放置在DOM中,因此没有应用样式/可见性。