Javascript 如何检查选择器是否与jQuery中的内容匹配?
在Mootools中,我只需运行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()函数(速度较慢),则可以执行
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));
});
};