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

IT技术 javascript jquery jquery-selectors
2021-02-03 20:12:19

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

6个回答

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

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

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

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

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

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

正如回答here

我改写了回复以强调 $.fn.exists 速度较慢。
2021-03-14 20:12:19
这是我见过的最愚蠢的插件之一......
2021-03-24 20:12:19
当 .length 完全相同时,这有什么意义?
2021-03-30 20:12:19
@TrueBlueAussie 所以它返回一个布尔值而不是一个数字
2021-04-09 20:12:19
@Josef:如果你正在对一个名为exists......的函数的返回值进行数学运算,那么代码设计非常糟糕:恕我直言:) 实际上添加一个单行扩展,比如比它替换的exists()2 个字符,开始是愚蠢的为JS!:)
2021-04-09 20:12:19

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

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

}
这比接受的答案的第二个建议更实用。(为什么要引入一个更慢更长的替代方法来简单地检查长度!)。我还注意到你的回答是更早的 +1 :)
2021-04-04 20:12:19

如果您使用:

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

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

这样会更好

jQuery.exists = function(selector) {return ($(selector).length > 0);}
if ($.exists(selector)) { }
您能否提供一个无法链接的示例?
2021-03-23 20:12:19
@TomasM:好吧,.exist()返回一个 bool,您不能在其上调用 jQuery 方法,请参阅此答案下方的评论
2021-04-08 20:12:19

我想这里回答的大多数人都没有完全理解这个问题,否则我可能会误会。

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

大多数人认为这是“如何使用 jQuery 检查 DOM 中是否存在元素”。很难互换。

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

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

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

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

干杯。

注意:在发布此问题后,问题已更改为他们的意图,因此此答案在此处不再有意义:)
2021-04-01 20:12:19

还有一种方式:

$('#elem').each(function(){
  // do stuff
});
如果您不想在#elem 不存在的情况下做任何特别的事情,那么这是一种不错的、更简洁的方法。
2021-03-25 20:12:19
我不敢相信这个答案会得到赞成票。这与existens检查无关。完全错误的方向。
2021-03-28 20:12:19
由于一个 ID 只能存在一次,而重复项会被 JS 和 jQuery 忽略,如果你不解释它是 0 或 1 的情况,这可能会导致混淆:)
2021-04-02 20:12:19