0

为什么一个tr尚未添加到 DOM 的元素在 jQuery 中被认为是可见的,而 adiv不是?

$('<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

谢谢各位的帮助!

4

2 回答 2

2

visible并不意味着您可以实际看到它。例如,即使您闭上眼睛,它仍然是正确的。

节点本身没有浏览器只渲染一棵 DOM 树的概念

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

您可能还会问,当它看不到时,怎么$('<b>Bold text</b>')可能是粗体或有任何图形格式。

文档中

元素可以被认为是隐藏的,原因如下:

  • 它们的 CSS 显示值为 none。
  • 它们是 type="hidden" 的表单元素。
  • 它们的宽度和高度明确设置为 0。
  • 祖先元素是隐藏的,因此该元素不会显示在页面上。

显然,这些都不是真的。

不过,我无法解释为什么 Dunhamzzz 能够产生不同的结果!它可能与iframe小提琴的运行方式有关。


更新

OK,jsfiddle.net 和它无关

但是,可以用 1.4.2 重现它

所以其中一个或两个都是错误的。鉴于trvs的不一致行为div,我建议 1.4.2 不正确(在 1.4.4 中有许多与隐藏项目相关的更改)并且文档具有误导性。

于 2011-07-06T14:04:56.420 回答
0

做一个小提琴,对我来说都是假的。这是意料之中的,因为它们还没有被放置在 DOM 中,因此没有应用于它们的样式/可见性。

于 2011-07-06T14:05:49.140 回答