是的,我知道很多人都问过这个问题。 但是,这让我很困惑,因为谷歌上的搜索结果显示了不同的方法(如下所示)

$(document).ready(function() {
    if ($('#DivID').length){
        alert('Found with Length');
    }

    if ($('#DivID').length > 0 ) {
        alert('Found with Length bigger then Zero');
    }

    if ($('#DivID') != null ) {
        alert('Found with Not Null');
    }
});

这三个中哪一个是检查div是否存在的正确方法?

编辑: 遗憾的是,人们并不想从这三种不同的方法中学习哪种方法更好。这个问题实际上不是关于“如何检查一个div是否存在”,而是关于哪种方法更好,如果有人能解释一下,为什么它更好?


当前回答

如果你只是检查一个ID的存在,没有必要进入jQuery,你可以简单地:

if(document.getElementById("yourid") !== null)
{
}

如果找不到getElementById,则返回null。

参考。

如果你打算以后使用jQuery对象,我建议:

$(document).ready(function() {
    var $myDiv = $('#DivID');

    if ( $myDiv.length){
        //you can now reuse  $myDiv here, without having to select it again.
    }


});

选择器总是返回一个jQuery对象,所以不应该需要检查null(如果有需要检查null的边缘情况,我会感兴趣-但我不认为有)。

如果选择器没有找到任何东西,那么length === 0是“假的”(当转换为bool时,它是假的)。所以如果它发现了什么,那么它应该是“真实的”-所以你不需要检查> 0。只是因为它的"真实性"

其他回答

第一个是最简洁的,我会选择它。前两个是一样的,但是第一个要短一点,所以可以节省字节。第三个是完全错误的,因为这个条件的值总是true,因为对象永远不会为null或false。

正如karim79提到的,第一个是最简洁的。然而,我认为第二种更容易理解,因为对于一些Javascript/jQuery程序员来说,不明显/不知道非零/假值在if语句中被评估为真。正因为如此,第三种方法是不正确的。

如果你只是检查一个ID的存在,没有必要进入jQuery,你可以简单地:

if(document.getElementById("yourid") !== null)
{
}

如果找不到getElementById,则返回null。

参考。

如果你打算以后使用jQuery对象,我建议:

$(document).ready(function() {
    var $myDiv = $('#DivID');

    if ( $myDiv.length){
        //you can now reuse  $myDiv here, without having to select it again.
    }


});

选择器总是返回一个jQuery对象,所以不应该需要检查null(如果有需要检查null的边缘情况,我会感兴趣-但我不认为有)。

如果选择器没有找到任何东西,那么length === 0是“假的”(当转换为bool时,它是假的)。所以如果它发现了什么,那么它应该是“真实的”-所以你不需要检查> 0。只是因为它的"真实性"