jQuery:检查是否存在具有特定类名的 div

IT技术 javascript jquery jquery-selectors javascript-framework
2021-03-11 15:49:47

使用 jQuery 我以编程方式生成一堆这样的div's:

<div class="mydivclass" id="myid1">Some Text1</div>
<div class="mydivclass" id="myid2">Some Text2</div>

在我的代码中的其他地方,我需要检测这些 DIV 是否存在。div 的类名是相同的,但每个 div 的 ID 都不同。知道如何使用 jQuery 检测它们吗?

6个回答

您可以通过检查从 JQuery 返回的第一个对象来简化这一点,如下所示:

if ($(".mydivclass")[0]){
    // Do something if class exists
} else {
    // Do something if class does not exist
}

在这种情况下,如果第一个 ( [0]) 索引处有一个真值,则假设存在类。

2013 年 4 月10 日编辑:我在这里创建了一个 jsperf 测试用例

尽管还有其他解决方案也可以使用,但我最终还是使用了这个解决方案。感谢您的快速回答。
2021-04-27 15:49:47
有趣的是,你可能会觉得扔:first在那里将有助于性能(不知道性能是@itgorilla的重要标准),而是它是否确实变化疯狂的浏览器,大概是因为它改变了原生的功能jQuery的可以用来做选择。这是一个 div 存在的测试用例这是一个不存在的测试用例
2021-05-03 15:49:47
好点,无论哪种方式,它都只是一个属性查找。我不在乎这四个字符,但这取决于上下文可能会更清楚......
2021-05-07 15:49:47
@ThomasSebastian 试试 if (!$(".mydivclass")[0]){ /* do stuff */ }
2021-05-07 15:49:47
如果一个类不存在,如果我不想执行代码?
2021-05-15 15:49:47

您可以使用size(),但 jQuery 建议您使用 length 以避免另一个函数调用的开销:

$('div.mydivclass').length

所以:

// since length is zero, it evaluates to false
if ($('div.mydivclass').length) {

http://api.jquery.com/size/

http://api.jquery.com/length/

更新

所选答案使用了性能测试,但它略有缺陷,因为它还包括元素选择作为性能的一部分,这不是这里测试的内容。这是更新的性能测试:

http://jsperf.com/check-if-div-exists/3

我的第一次测试表明,属性检索比索引检索快,尽管 IMO 可以忽略不计。我仍然更喜欢使用长度,因为它对代码的意图更有意义,而不是更简洁的条件。

服务器以最小的性能影响来检查我的需求。
2021-05-05 15:49:47
根据您在 jsperf.com 上提供的工具链接,.length目前提供了最佳的平均性能。
2021-05-17 15:49:47

没有 jQuery:

原生 JavaScript 总是会更快。在这种情况下:(示例)

if (document.querySelector('.mydivclass') !== null) {
    // .. it exists
}

如果要检查父元素是否包含具有特定类的另一个元素,可以使用以下任一方法。(例子)

var parent = document.querySelector('.parent');

if (parent.querySelector('.child') !== null) {
    // .. it exists as a child
}

或者,您可以.contains()在父元素上使用该方法。(例子)

var parent = document.querySelector('.parent'),
    child = document.querySelector('.child');

if (parent.contains(child)) {
    // .. it exists as a child
}

..最后,如果您想检查给定元素是否仅包含某个类,请使用:

if (el.classList.contains(className)) {
    // .. el contains the class
}
$('div').hasClass('mydivclass')// Returns true if the class exist.
@Hussein:请注意,我一直很公平,并为您的主张提供了平衡的反证。对不起,如果我触动了神经,上次似乎也发生了。放轻松,这不是对个人的侮辱,而是技术讨论。厚脸皮和开放的思想对 StackOverflow 很有用。
2021-04-28 15:49:47
@tjhasClass比这里的其他选择器快 33%。检查jsperf.com/hasclass00
2021-05-02 15:49:47
@Hussein:只有一个完全不切实际的测试用例(两个div元素)回避了我强调的问题(构建数组)。用一堆 div 尝试一下:jsperf.com/hasclass00/2在我的 Chrome 副本上慢 63%,在我的 Firefox 副本上慢 43%,在 Opera 上慢 98% (!)。但此外,建立一个 div 列表然后搜索它会更慢,而不是为选择器引擎提供它需要的所有信息,这是有道理的。
2021-05-09 15:49:47
确实,这是一种替代方案,但价格昂贵。将低于早先的答案使用(该方法较慢显效较慢,在某些浏览器),并有更大的内存的影响,以及(jQuery有建立的数组所有的的div页面上的元素,然后回去遍历它们以查看它们是否具有该类,所有这些都是在最后丢弃数组)。
2021-05-14 15:49:47
@Hussein:HTML5 css 选择器意味着这几乎肯定是最糟糕的方法。-1 不是简单地删除您的帖子。
2021-05-14 15:49:47

这是不使用Jquery的解决方案

var hasClass = element.classList.contains('class name to search');
// hasClass is boolean
if(hasClass === true)
{
     // Class exists
}

参考链接

classList 仅在 IE10+ 中受支持:caniuse.com/classlist您必须添加polyfill github.com/eligrey/classList.js或编写自己的方法
2021-05-07 15:49:47