为什么不在DOM中TR可见?

时间:2011-07-06 14:01:44

标签: jquery jquery-1.4

为什么尚未添加到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

感谢所有人的帮助!

2 个答案:

答案 0 :(得分:2)

visible并不意味着你可以亲眼看到它。例如,即使你的眼睛闭合,它仍然是真的。

节点本身没有概念,浏览器只渲染一个 DOM树。

它没有设置属性,因此HTML浏览器会将其视为“不可见”,因此它是“可见的”......即使它不是浏览器实际渲染的一个节点树的一部分。

您可能还会问$('<b>Bold text</b>')如果无法看到iframe可能是粗体,或者任何图形格式。

来自the documentation

  

可以认为元素是隐藏的   有几个原因:

     
      
  • 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中,因此没有应用样式/可见性。