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

One*_*yon 447 javascript jquery jquery-selectors

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

Pat*_*Pat 719

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

if ($(selector).length ) {
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

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

jQuery.fn.exists = function(){return this.length>0;}
Run Code Online (Sandbox Code Playgroud)

然后在你的代码中你可以使用

if ($(selector).exists()) {
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

这里回答

  • 我重写了回复,强调$ .fn.exists较慢. (8认同)
  • 这是我见过的傻瓜插件之一...... (7认同)
  • @Josef:如果你对一个名为`exists`的函数的返回值进行数学运算,那么代码设计非常糟糕...恕我直言:)实际上添加了一个单行扩展,比如`exists()`就是2个字符*更长*替换它取代的是JS开始的愚蠢!:) (3认同)

red*_*are 89

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

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

}
Run Code Online (Sandbox Code Playgroud)


Jon*_*son 20

如果您使用:

jQuery.fn.exists = function(){return ($(this).length > 0);}
if ($(selector).exists()) { }
Run Code Online (Sandbox Code Playgroud)

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

这会更好

jQuery.exists = function(selector) {return ($(selector).length > 0);}
if ($.exists(selector)) { }
Run Code Online (Sandbox Code Playgroud)


skq*_*kqr 16

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

问题是"如何检查jQuery中是否存在选择器."

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

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

$(':YEAH');
"Syntax error, unrecognized expression: YEAH"
Run Code Online (Sandbox Code Playgroud)

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

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

干杯.

  • 注意:问题已被更改为意味着他们在发布后的意图,所以这个答案不再有意义:) (3认同)

Phi*_*ilT 15

另一种方式:

$('#elem').each(function(){
  // do stuff
});
Run Code Online (Sandbox Code Playgroud)

  • 如果#elem不存在,如果你不想做任何特别的事,那就很好,更干净. (3认同)

小智 13

if ($('#elem')[0]) {
  // do stuff
}
Run Code Online (Sandbox Code Playgroud)