关于javascript:如何检查选择器是否匹配jquery中的某个内容?

How do you check if a selector matches something in jQuery?

本问题已经有最佳答案,请猛点这里访问。

在mootools中,我只运行if ($('target')) { ... }。jquery中的if ($('#target')) { ... }工作方式相同吗?


正如其他评论者所建议的,最有效的方法似乎是:

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

如果您必须具有exists()函数(速度会变慢),则可以执行以下操作:

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

然后在代码中可以使用

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

正如这里的回答


不,jquery总是返回jquery对象,不管选择器是否匹配。你需要使用。长度

1
2
3
if ( $('#someDiv').length ){

}


如果您使用:

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

您可能会暗示,如果不可能,则可以使用链。

这样会更好

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


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

问题是"如何检查jquery中是否存在选择器"。

大多数人认为这是"如何使用jquery检查DOM中是否存在元素",几乎不可互换。

jquery允许您创建自定义选择器,但请在这里查看在初始化e之前尝试在e上使用时会发生什么情况;

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

在遇到这个问题后,我意识到这只是一个简单的检查问题。

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

干杯。


另一种方式:

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


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


可选地:

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


1
2
3
4
5
6
jQuery.fn.exists = function(selector, callback) {
    var $this = $(this);
    $this.each(function() {
        callback.call(this, ($(this).find(selector).length > 0));
    });
};


我更喜欢

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

它基本上检查这个元素是否是一种"*"(任何元素)。只是一个更清晰的语法,"is"在"if"中更有意义


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

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


首先创建一个函数:

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

然后

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