你如何检查选择器是否匹配jQuery中的内容?

时间:2008-11-18 19:13:31

标签: javascript jquery jquery-selectors

在Mootools中,我只是运行if ($('target')) { ... }。 jQuery中if ($('#target')) { ... }的工作方式是否相同?

11 个答案:

答案 0 :(得分:699)

正如其他评论者提出的最有效的方法似乎是:

if ($(selector).length ) {
    // Do something
}

如果你绝对必须有一个exists()函数 - 它会更慢 - 你可以这样做:

jQuery.fn.exists = function(){return this.length>0;}

然后在您的代码中,您可以使用

if ($(selector).exists()) {
    // Do something
}

回答here

答案 1 :(得分:82)

不,无论选择器是否匹配,jquery总是返回一个jquery对象。 你需要使用.length

if ( $('#someDiv').length ){

}

答案 2 :(得分:19)

如果您使用:

jQuery.fn.exists = function(){return ($(this).length > 0);}
if ($(selector).exists()) { }

你会暗示链接是可能的,但事实并非如此。

这样会更好

jQuery.exists = function(selector) {return ($(selector).length > 0);}
if ($.exists(selector)) { }

答案 3 :(得分:15)

我认为大多数在这里回复的人都不太明白这个问题,否则我可能会弄错。

问题是“如何检查jQuery中是否存在选择器。”

大多数人都认为“如何使用jQuery检查DOM中是否存在元素。”几乎不可互换。

jQuery允许您创建自定义选择器,但是在这里看到当您在初始化之前尝试使用e时会发生什么;

$(':YEAH');
"Syntax error, unrecognized expression: YEAH"

在遇到这个之后,我意识到这只是一个检查问题

if ($.expr[':']['YEAH']) {
    // Query for your :YEAH selector with ease of mind.
}

干杯。

答案 4 :(得分:14)

另一种方式:

$('#elem').each(function(){
  // do stuff
});

答案 5 :(得分:13)

if ($('#elem')[0]) {
  // do stuff
}

答案 6 :(得分:3)

可替换地:

if( jQuery('#elem').get(0) ) {}

答案 7 :(得分:1)

我更喜欢

    if (jQuery("#anyElement").is("*")){...}

这基本上检查这些元素是否是一种“*”(任何元素)。 只是一个更清晰的语法和“是”在“if”

中更有意义

答案 8 :(得分:1)

jQuery.fn.exists = function(selector, callback) {
    var $this = $(this);
    $this.each(function() {
        callback.call(this, ($(this).find(selector).length > 0));
    });
};

答案 9 :(得分:-4)

对我来说.exists不起作用,所以我使用索引:

if ($("#elem").index() ! = -1) {}

答案 10 :(得分:-6)

首先创建一个函数:

$.fn.is_exists = function(){ return document.getElementById(selector) }

然后

if($(selector).is_exists()){ ... }