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

Javascript 如何检查选择器是否与jQuery中的内容匹配?,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,在Mootools中,我只需运行if($('target'){…}。if($('#target'){…}在jQuery中的工作方式是否相同?否,jQuery总是返回jQuery对象,无论选择器是否匹配。 你需要使用。长度 if ( $('#someDiv').length ){ } 正如其他评论者所建议的那样,最有效的方法似乎是: if ($(selector).length ) { // Do something } 如果您绝对必须具有exists()函数(速度较慢),则可以执行

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

否,jQuery总是返回jQuery对象,无论选择器是否匹配。 你需要使用。长度

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

}

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

if ($(selector).length ) {
    // Do something
}
如果您绝对必须具有exists()函数(速度较慢),则可以执行以下操作:

jQuery.fn.exists = function(){return this.length>0;}
然后在代码中可以使用

if ($(selector).exists()) {
    // Do something
}
正如回答的那样

或者:

if( jQuery('#elem').get(0) ) {}
如果您使用:

jQuery.fn.exists = function(){return ($(this).length > 0);}
if ($(selector).exists()) { }
你可能会暗示链接是可能的,但事实并非如此

这样会更好

jQuery.exists = function(selector) {return ($(selector).length > 0);}
if ($.exists(selector)) { }
还有另一种方式:

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

对于我来说,
.exists
不起作用,因此我使用索引:

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

我想这里回答的大多数人都不太理解这个问题,否则我可能会弄错

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

大多数人将此理解为“如何使用jQuery检查DOM中是否存在元素”,这很难互换

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

$(':YEAH');
"Syntax error, unrecognized expression: YEAH"
在遇到这个问题后,我意识到这只是一个简单的检查问题

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

我更喜欢

    if (jQuery("#anyElement").is("*")){...}
它基本上检查这个元素是否是一种“*”(任意元素)。
只是一个更简洁的语法,“is”在“if”中更有意义首先创建一个函数:

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



当.length与之完全相同时,这有什么意义?这是我见过的最愚蠢的插件之一…我重新编写了回复,以强调$.fn.exists的速度较慢。@TrueBlueAussie,因此它返回bool而不是anumber@Josef:如果对调用的函数的返回值进行数学运算,则代码设计非常糟糕
存在
。。。IMHO:)实际上添加一个单行扩展名,比如
exists()如果#elem不存在,您不想做任何特殊的事情,那么这是一种很好的、更干净的方法。由于ID只能存在一次,重复的ID会被JS和jQuery忽略,如果您不解释这是0或1的情况,这可能会导致混乱:)我不相信这个答案会得到支持。这与现有支票无关。完全错误的方向。我喜欢这个简洁。任何人都能说它是否在任何地方都能工作。length能工作吗?唯一不能工作的情况是,如果jQuery给你一个包含null(或“falsy”)内容的数组,而不是DOM元素对象,这将是令人惊讶的。你必须创建exists()函数这比使用
.length
更长、更慢。这个答案最好删除(投票删除)。听起来像是付出了很多努力,而不仅仅是阅读一个现有的财产。这是显着慢于替代品,可以说是可读性较差。您不会引入解析来检查数组的长度,而jQuery对象的行为就像数组一样。另请参见注意:问题已被更改为在发布此问题后的含义,因此此答案在此处不再有意义:)这假定选择器是一个ID,而不是所需的jQuery选择器。最好删除此答案,因为它具有误导性-1投票删除此长度不小于
.length
(且更慢)(&D)
$(“#elem”)[0]
也会这样做。如果您只是想知道是否有零个或多个匹配项,为什么要对每个
执行
和回调?我现在觉得自己比读这篇文章之前更傻了-1.您能提供一个不可能链接的示例吗?@TomasM:Well,
.exist()
返回一个bool,您不能在其上调用jQuery方法,请参见下面的注释。这比接受答案的第二个建议更实际。(为什么要引入一种比简单检查长度更慢、更长的替代方案呢!)。我还注意到您的回答是前面的+1:)
$.fn.is_exists = function(){ return document.getElementById(selector) }
if($(selector).is_exists()){ ... }
jQuery.fn.exists = function(selector, callback) {
    var $this = $(this);
    $this.each(function() {
        callback.call(this, ($(this).find(selector).length > 0));
    });
};