【问题标题】:Why is a TR visible when not in DOM?为什么不在 DOM 中的 TR 可见?
【发布时间】:2011-09-29 16:10:37
【问题描述】:

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

感谢大家的帮助!

【问题讨论】:

  • 我无法在 Firefox 5 上 jsfiddle 上可用的任何 jQuery 版本中重现这一点。两者都是 false
  • @tjm:我可以用 1.4.2 重现它,但是 jsfiddle 没有那个版本。
  • 很奇怪。可能是 1.4.2 中的错误? (或者错误可能不是正确的词;但肯定是不一致)。
  • 旁注:尝试将您的 jQuery 更新到 1.6.2 :)

标签: jquery jquery-1.4


【解决方案1】:

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

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

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

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

来自the documentation

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

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

显然这些都不是真的。

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


更新

好的,jsfiddle.net has nothing to do with it

但是,I can reproduce this with 1.4.2

所以其中一个或两个都是错误的。鉴于 trdiv 的行为不一致,我建议 1.4.2 不正确(有 a number of hidden-item-related changes in 1.4.4)并且文档具有误导性。

【讨论】:

    【解决方案2】:

    做一个小提琴,both are false for me. 这是意料之中的,因为它们还没有被放置在 DOM 中,因此没有应用于它们的样式/可见性。

    【讨论】:

    猜你喜欢
    • 2019-04-01
    • 1970-01-01
    • 2011-07-08
    • 2016-08-13
    • 1970-01-01
    • 2015-10-02
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多