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


235

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

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

我需要在代码的其他位置检测这些DIV是否存在。div的类名称相同,但每个div的ID均更改。知道如何使用jQuery检测它们吗?

Answers:


424

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

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

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

编辑04/10/2013:我在这里创建了一个jsperf测试用例。


好的一点,无论哪种方式,它都只是属性查找。我不在乎这四个字符,但这取决于上下文可能会更清楚 ……
TJ Crowder

尽管还有其他解决方案也可以使用,但我最终还是使用了该解决方案。谢谢您的快速解答。
阿凡达

1
有趣的是,你可能会觉得扔:first在那里将有助于性能(不知道性能是@itgorilla的重要标准),而是它是否确实变化疯狂的浏览器,大概是因为它改变了原生的功能jQuery的可以用来做选择。这是一个存在div的测试用例这是一个不存在的测试用例
TJ Crowder

如果不存在一个类,我是否不想执行代码?
托马斯·塞巴斯蒂安

1
@ThomasSebastian Tryif (!$(".mydivclass")[0]){ /* do stuff */ }
Shaz

117

您可以使用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可以忽略不计,但是属性检索比索引检索更快。我仍然更喜欢使用长度,因为对于我来说,使用长度比使用更简洁的代码更有意义。


3
根据您在jsperf.com上提供给该工具的链接,.length当前可提供最佳的平均性能。
gmeben

以最小的性能影响满足我的需求。
David O'Regan

77

没有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
}

57
$('div').hasClass('mydivclass')// Returns true if the class exist.

3
诚然,这是另一种选择,但价格昂贵。将低于早先的答案使用(该方法较慢显效较慢,在某些浏览器),并有更大的内存的影响,以及(jQuery有建立的数组所有的的div页面上的元素,然后回去遍历它们以查看它们是否具有该类,所有这些都将在最后丢弃该数组)。
TJ Crowder

3
@tj hasClass比此处的其他选择器快33%。检查jsperf.com/hasclass00
侯赛因

1
@侯赛因:只有一个完全不切实际的测试用例(两个div元素)才可以回避我强调的问题(构建数组)。尝试一堆div:jsperf.com/hasclass00/2在我的Chrome副本上慢63%,在Firefox副本上慢43%,在Opera上慢98%(!)。但此外,有意义的是,建立一个div列表然后进行搜索要慢一些,而不是向选择器引擎提供所需的所有信息。
TJ Crowder

1
@侯赛因:请注意,我的举止非常平均,对您的主张提供了平衡的反证。很抱歉,如果我触碰到神经,那似乎也是在上一次发生。放松一下,这不是个人冒犯,而是技术讨论。厚厚的皮肤和开放的心态在StackOverflow上很有用。
TJ Crowder

1
@侯赛因:HTML5 css选择器意味着几乎可以肯定,这将始终是最糟糕的方法。-1代表不只是删除您的帖子。
Stefan Kendall,



10

div明确测试元素:

if( $('div.mydivclass').length ){...}


这可能比.mydivclass依赖于浏览器和jQuery版本要慢一些。
Stefan Kendall,

的确如此,但是OP确实专门说了“ jQuery-检查具有特定类名的div是否存在 ”(我强调),因此您获得了我的投票,因为它是第一个真正包含div选择器部分的人。
TJ Crowder

7

简单的代码如下:

if ($('.mydivclass').length > 0) {
   //Things to do if class exist
}

要隐藏带有Particuler ID的div:

if ($('#'+given_id+'.mydivclass').length > 0) {
   //Things to do if class exist
}

3

以下是一些方法:

1.  if($("div").hasClass("mydivclass")){
    //Your code

    //It returns true if any div has 'mydivclass' name. It is a based on the class name
    }

2. if($("#myid1").hasClass("mydivclass")){
    //Your code


    //  It returns true if specific div(myid1) has this class "mydivclass" name. 
    //  It is a  based on the specific div id's.
    }           
3. if($("div[class='mydivclass']").length > 0){
    //Your code

   // It returns all the divs whose class name is "mydivclass"
   //  and it's length would be greater than one.
    }

我们可以根据需要使用上述任何一种以上定义的方式。


2
if ($(".mydivclass").size()){
   // code here
}

size()方法仅返回jQuery选择器选择的元素数量-在这种情况下,该类包含元素的数量mydivclass。如果返回0,则表达式为false,因此不存在,如果返回任何其他数字,则div必须存在。


1
为什么要在有length属性的情况下调用方法?此外,这还会检查具有该类的任何元素,而不仅仅是a div。(现在,这可能就是OP的意思,即使不是他/她说的话。)请参阅Stefan Kendall的回答,该回答与OP实际说的一样(即使再次,它们可能意味着您所做的事情)。
TJ Crowder

1
@TJ Crowder:好吧,个人喜好-我只是觉得size()方法在那里-为什么不使用它。调用函数的额外开销(除非您在一个循环中执行1000次)非常少,所以我宁愿代码清楚一点。关于第二点-是的,我更改了原始答案以删除该div部件,其原因有两个:1)选择器并不局限于OP使用div元素(将来可能会更改)的事实,以及2)大多数浏览器和jQuery,AFAIK版本,这应该更快。
Herman Schaaf

“我只是觉得size()方法在那里-为什么不使用它呢?”嗯,好吧。该length物业是存在的,为什么不使用它?但是,如果您愿意,那就公平吧。另一方面,我不知道您已将其编辑。如果要执行此操作,则将其保留(再次,他专门说“ ...如果div带有...”(我的重点),然后另外提及是否无关紧要是div不是,您可以放弃该部分。但是
TJ Crowder

@TJ Crowder:是的,我认为我们对此考虑过多。
Herman Schaaf

@TJ Crowder:但是,在我的辩护中,尽管这里不是讨论的地方:我觉得这里的size()方法可以清楚地表明您正在计算jQuery选择器中的元素数量,而不仅仅是任何旧数组。但是,这只是我的偏爱。
Herman Schaaf

2

检查div是否存在某个类

if ($(".mydivclass").length > 0) //it exists 
{

}

2
if($(".myClass")[0] != undefined){
  // it exists
}else{
  // does not exist
}

2
似乎与这个现有答案几乎相同。

是的,确实可以。但是我尝试了这个答案,但没有成功。当我将比较添加到“未定义”中时,它似乎可以正常工作。
stairie '17

2
var x = document.getElementsByClassName("class name");
if (x[0]) {
alert('has');
} else {
alert('no has');
}

尽管此代码可以回答问题,但提供有关此代码为何和/或如何回答问题的其他上下文,可以提高其长期价值。
Vishal Chhodwani

2

在Jquery中,您可以像这样使用。

if ($(".className")[0]){

   // Do something if class exists

} else {

// Do something if class does not exist

}

使用JavaScript

if (document.getElementsByClassName("className").length > 0) {

// Do something if class exists

}else{

    // Do something if class does not exist

}

2

这是Java中的检查类(hasClass)的非常示例解决方案:

const mydivclass = document.querySelector('.mydivclass');
// if 'hasClass' is exist on 'mydivclass'
if(mydivclass.classList.contains('hasClass')) {
   // do something if 'hasClass' is exist.
}

1

用JavaScript最好的方法:

if (document.getElementsByClassName("search-box").length > 0) {
// do something
}

1

if($(“#myid1”)。hasClass(“ mydivclass”)){//做任何事情}


请给您的答案一些解释
可执行的

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.