如何检查选择器是不是匹配 jQuery 中的某些内容? [复制]

Posted

技术标签:

【中文标题】如何检查选择器是不是匹配 jQuery 中的某些内容? [复制]【英文标题】:How do you check if a selector matches something in jQuery? [duplicate]如何检查选择器是否匹配 jQuery 中的某些内容? [复制] 【发布时间】:2010-09-22 22:09:58 【问题描述】:

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

【问题讨论】:

另见Is there an exists function for jQuery? 【参考方案1】:

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

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

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

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

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

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

回复here

【讨论】:

当 .length 完全一样时,这有什么意义? 这是我见过的最傻的插件之一... 我已经改写了回复以强调 $.fn.exists 速度较慢。 @TrueBlueAussie 所以它返回一个布尔值而不是一个数字 @Josef:如果您对名为exists 的函数的返回值进行数学运算,代码设计将非常糟糕...恕我直言:) 实际上添加了一个单行扩展,例如exists()这比它替换的字符 2个字符对于JS来说是愚蠢的! :)【参考方案2】:

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

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


【讨论】:

这比公认答案的第二个建议更实用。 (你为什么要引入一个更慢和更长的替代方法来简单地检查长度!)。我还注意到您的回答是早些时候 +1 :)【参考方案3】:

如果你使用过:

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

你会暗示链接是可能的,而实际上不是。

这样会更好

jQuery.exists = function(selector) return ($(selector).length > 0);
if ($.exists(selector))  

【讨论】:

你能提供一个不能链接的例子吗? @TomasM:嗯,.exist() 返回一个布尔值,你不能在它上面调用 jQuery 方法,见下面的 cmets this answer。【参考方案4】:

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

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

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

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

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

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

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

干杯。

【讨论】:

注意:问题已更改为发布后的意思,因此此答案在这里不再有意义:)【参考方案5】:

另一种方式:

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

【讨论】:

如果您不想在#elem 不存在的情况下做任何特别的事情,那是一种很好、更简洁的方法。 由于一个ID只能存在一次,而重复的被JS和jQuery忽略,如果你不解释它是0或1的情况,这可能会导致混乱:) 我不敢相信这个答案会得到支持。这与存在检查无关。完全错误的方向。【参考方案6】:
if ($('#elem')[0]) 
  // do stuff

【讨论】:

为了简洁起见,我喜欢这个。谁能说它是否会在任何地方都有效。长度会有效吗? 唯一不会的情况是如果 jQuery 给你一个数组,例如null(或其他“虚假”)内容而不是 DOM 元素对象,这将是令人惊讶的。【参考方案7】:

或者:

if( jQuery('#elem').get(0) ) 

【讨论】:

这不比.length短(而且更慢)。 $('#elem')[0] 也会这样做。【参考方案8】:

我更喜欢

    if (jQuery("#anyElement").is("*"))...

这基本上检查这个元素是否是一种“*”(任何元素)。 只是语法更简洁,而“is”在“if”中更有意义

【讨论】:

与仅读取现有属性相比听起来需要付出很多努力 这比替代方案要慢得多,并且可读性可能会降低。您不会引入解析来检查数组的长度,并且 jQuery 对象的行为就像数组一样。【参考方案9】:
jQuery.fn.exists = function(selector, callback) 
    var $this = $(this);
    $this.each(function() 
        callback.call(this, ($(this).find(selector).length > 0));
    );
;

【讨论】:

如果您只想知道是否有零个或多个匹配项,为什么还要执行each 和回调?我现在觉得比我读这篇文章之前更愚蠢! -1.【参考方案10】:

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

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

【讨论】:

你必须创建exists()函数 这比使用.length 更长更慢。这个答案最好删除(投票删除)。【参考方案11】:

首先创建一个函数:

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

然后

if($(selector).is_exists()) ... 

【讨论】:

这假定选择器是一个 ID,而不是所需的 jQuery 选择器。最好删除此答案,因为它具有误导性。 -1 & 投票删除

以上是关于如何检查选择器是不是匹配 jQuery 中的某些内容? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 选择器 - 检查当前 div 属性是不是包含文本?

当 url 匹配时使 jquery 选择器返回结果

jquery选择器之属性选择器

如何使用 jquery 获得精确的 div 标签匹配选择器?

如何使用 jquery 检查变量选择器中的属性?

如何根据 PHP 数据库中的结果在 jQuery 日期选择器上禁用一周中的某些天