为什么(:hidden)在可见时返回true?

时间:2015-05-26 02:28:00

标签: javascript jquery

如果隐藏了ID为“err_msg”的div,我正在尝试做某事。但是当元素未被隐藏时,下面的代码返回true。为什么会这样?

<script>
    $(function () {
        var error_msg = $("#err_msg");
        if(error_msg.filter(":hidden")){
            console.log("The error message is hidden");
        }
    });
</script>
<body>
<div id="err_msg">Test </div>

2 个答案:

答案 0 :(得分:3)

任何像这样的jQuery方法总是返回一个对象,而一个对象永远不会“falsy”。

如果要检查jQuery对象是否为空,请检查.length

if (error_msg.filter(":hidden").length) {
  console.log("it's hidden");
}

库维护.length就好像对象是一个数组一样,所以如果长度为零,则其中没有任何内容;如果它不为零,那么至少有一个元素。

答案 1 :(得分:2)

使用is(':hidden')

error_msg.is(":hidden")

.filter()将始终返回一个对象。是否清空,这是真的。

$(function () {

    var error_msg = $("#err_msg");

    if(error_msg.is(":hidden")){
        console.log("The error message is hidden");
    }

 })