0

似乎不在 DOM 中的元素被认为是隐藏的,不管 CSS 应用于这些元素

例如,将以下内容放在 Chrome 控制台中的计算结果为false

$('<div style="display: block;">i am a div</div>').is(":visible")

有什么方法可以检查像上面这样的分离元素是否可见。我不只是想检查displaycss 属性是block.

4

4 回答 4

1

这取决于您要执行的操作,但最简单的方法是将其附加以进行检查:

var $div = $("<div>");
$div.appendTo("body").is(":visible");
$div.detach();

如果此检查对您来说是禁止的,您可以同时检查displayvisibilityCSS 以分别检查它们是否不是nonehidden,并且该hidden属性未设置。您也可以执行类似设置position: fixed; top: 100%的操作并执行上述测试。

编辑:似乎 jQuery 的隐藏检查是:

jQuery.css( elem, "display" ) === "none"
|| !jQuery.contains( elem.ownerDocument, elem )

所以你可以去掉那里的第二行来做一个等效的检查。

于 2013-03-07T21:00:09.427 回答
1

你当然可以

var foo = $('<div style="display: block;">i am a div</div>');
foo.appendTo('body');

var vis = foo.is(":visible");

console.log(vis);

foo.detach();

不过,不知道你为什么想尝试这个。

于 2013-03-07T21:00:46.523 回答
0

尝试这个:

$('<div style="display: block;">i am a div</div>').css("display")!="none"
于 2013-03-07T21:00:20.393 回答
0

如果一个元素未附加到 DOM,则浏览器不会将其视为可见,因为简单地说它没有可能影响其可见性的父元素

于 2013-03-07T21:00:49.940 回答