如何检查某个元素在 jQuery 中是否存在?

这是我拥有的当前代码︰

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

是否还有更巧妙的方法可解决此?也许是某个插件或函数?

2008-08-27 19:49:41
问题评论:

if ($(selector).length) {}是最简洁、 最快。

注意︰ 在 jQuery 版本早于 1.4, $('').length // is 1 (ref)。因此,在这种情况下使用$(selector || []).length.

if($(selector)[0]) {}我一直在用这.

我认为使用 length 属性不最优雅。可能很快,但不优雅。是一种巧妙的方法具有如下所示什么 OP 所提到的.exists() 方法。

通过整个 DOM 构建数组的元素,当您只需要知道是否存在 1,迭代是可怕的反模式。包含.length 的答案是可能会非常慢和执行而不是 getElementById document.querySelectorAll("#myid") [0] 的等效项。

回答:

在 JavaScript 中,一切都是 truthy 或 falsy,和数字0表示false,其他所有内容true因此,您可以编写︰

if ($(selector).length)

不需要>0部分。

@MrBoJangles︰ 这正是"最佳"的答案?您喜欢它而不是其他,但这并不意味着其他人也不会。我将提交给您的一般情况下,"最满意的答案"就投票的顶部。

对我不起作用而 = = 0

@Chuck Norris︰ 使用 === 0 正好相反。这是 achived 加上 !(不) 在其前面的条件︰if (!$(selector).length)

这是最可读的解决方案。这么说它仍然使用不足懒惰。

我同意。。这是正确的答案。有没有理由将留您 arg 转到一个函数来返回 true 或 false。如果您不懂什么"长度"是那么您不应编码 = p

是的!

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

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

就可以了 !

这是为了响应︰收集代码与 Jeff Atwood 的播客

我只是写︰ 如果 ($(选择器).length) {...} 没有 ' > 0

$.fn.exists示例是真正,真正可怕的是,我希望没有人使用它。要使用更昂贵的两个函数调用替换属性查找 (便宜 !) — — 和这些函数调用之一重新创建已有一个 jQuery 对象它是只傻。

@redsquare︰ 代码的可读性是在 jQuery 中添加这种功能的最佳理由。包含某个对象调用.exists读取干净,而.length将作为读取内容在语义上不同,即使语义重合与相同结果。

@quixoto,很抱歉,但.length 是跨多语言不需要换行的一种标准。如何将.length 的解释?

在我看来,它是"大于零列表长度"的概念从至少一个逻辑的间接寻址"元素我编写存在的选择器"的概念。是的它们从技术上讲,是同样的事情,但概念的抽象是在不同的级别。这会使某些人更愿意使用更明确的指标,甚至在一定的性能开销。

如果您使用

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

将意味着,链接时可能不是。

这将是更好︰

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

另外,从常见问题解答:

if ( $('#myDiv').length ) { /* Do something */ }

您也可以使用以下。如果有没有然后获取数组中的第一项为 jQuery 对象数组中的值将返回未定义。

if ( $('#myDiv')[0] ) { /* Do something */ }

第一种方法更好地读取。"是否 < a > 元素存在。"作为读取 $("a").exists() $.exists("a") 显示为"是否那里存在 < a > 元素。

但再次,您真暗指,链接是可能的如果我尝试做类似于 $(选择器).exists ().css ("颜色"、"红色") 它不会起作用,然后我将会 = * (

已经有不是可链接,如属性和数据功能的方法。看不过到您的观点,而且,对于怎么您的 worth,我只是测试长度 > 0 吗。

为什么地球上您需要链接这?$(".missing").css("color", "red")已经有一些做正确的事...(亦即执行任何操作)

第一个示例 ($('.mySelector').length) 正常工作,无需为其创建 exists() 包装。

您可以使用︰

// if element exists
if($('selector').length){ /* do something */ }

// if element does not exist
if(!$('selector').length){ /* do something */ }

是否没有看见,Tim Büthe 已经赋予了此答案在您之前的 2 年?

Pfft,Tim 从未展示如何测试如果该元素不存在。

最快和最语义上自我解释检查存在的方法实际上是通过纯 JavaScript:

if (document.getElementById('element_id')) {
    // Do something
}

它是较长的时间来编写比 jQuery 长度,但执行得更快,因为它是一个本机的 JS 方法。

而且它优于编写您自己的 jQuery 函数的备选方案。该替代方法是比较慢的为所述原因 @snover。而它也发出其他程序员的 exists() 函数是一些固有的 jQuery 的印象。JavaScript 会应理解其他人编辑您的代码,而无需增加的知识债务。

NB︰ 注意到缺乏 '#' 前 element_id (因为这是普通的 JS,不 jQuery)。

完全不是一回事。JQuery 选择器可以用于任何 CSS 规则-例如$('#foo a.special')并且可以返回多个元素。getElementById不能接近的。

您是正确的因为它不作为选择器广泛适用。然而,它没有渡过中最常见的情况 (检查是否存在单个元素) 的作业。自我解释和速度的参数仍然保持完整。

@Nozif(document.querySelector("#foo a.special"))将起作用。没有所需的 jQuery。

在 JS 引擎速度的参数才死的人不能没有 jQuery,因为它是一个参数,他们能赢得注意。

请记住好我们有 document.getElementById 时所有的时光吗?然后,我总是忘记了文档。并不知道为什么它不起作用。和我总是拼写错误并得到的字符大小写不正确。

内容来源于Stack Overflow Is there an “exists” function for jQuery?
请输入您的翻译

Is there an “exists” function for jQuery?

确认取消