如何检查选择器是不是匹配 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 anexists
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 属性是不是包含文本?