jQuery检查多个元素是否有类

时间:2015-09-07 11:20:06

标签: html jquery

我需要根据3个元素是否有类来在条件语句中运行一个函数。

简而言之,如果(elm1,elm2,elm3)有类"包括"然后响了。但是所有3个元素都必须具有该类,如果只有2个或1个具有该类,则它不能成立。

<div class="elm1" class="include"></div>
<div class="elm2" class="include"></div>
<div class="elm3" class="include"></div>

jQuery('#search-submit').click(function() { 
    if (#elm1, #elm2, #elm3).hasClass('include'){
        /* return true */
    } else {
        /* return false */
    }
}

毋庸置疑,这不起作用。

5 个答案:

答案 0 :(得分:1)

您的标记不正确,请id="elm1"而非class="elm1"(对于所有三个元素)。还有一些语法错误,如
1. jQuery('#search-submit') - 此区块必须以});为结尾 2.将您的选择器放在引号内,在您的情况下if (#elm1, #elm2, #elm3)
3.如果条件必须在()

你可以拥有所有元素的id数组并迭代它以知道元素是否具有类并相应地设置标志。

var elements = ['#elm1', '#elm2', '#elm3'];
jQuery('#search-submit').click(function() { 
    var result = true;
    //iterate all elements ids
    jQuery.each(elements, function(i, v){
       //set result false if element don't have class
       if(!jQuery(v).hasClass('include'))
          result = false;
    });
    //show final result
    alert(result);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="elm1" class="include"></div>
<div id="elm2" class="include"></div>
<div id="elm3" class="include"></div>

<input id="search-submit" type="button" value="Click me">

答案 1 :(得分:1)

您可以执行类似

的操作
<div class="elm1 include"></div>
<div class="elm2 include"></div>
<div class="elm3 include"></div>

 var classNotFound = false;
 $('.elm1, .elm2, .elm3').each(function() {
     if (!$(this).hasClass('include')){
        classNotFound = true;
     }
 });
 return classNotFound;

答案 2 :(得分:0)

你必须更正你的标记,因为你不能在一个元素中有多个相同的属性(正如Jai注意到的那样......):

library(data.table)
setDT(df)[, CRIT := cumsum(THR < 19)]
df[THR >= 19, GRP := cumsum(c(0L, diff(CRIT)) != 0L) + 1L]
#     THR CRIT GRP
#  1:  13    1  NA
#  2:  17    2  NA
#  3:  19    2   1
#  4:  22    2   1
#  5:  21    2   1
#  6:  19    2   1
#  7:  17    3  NA
#  8:  12    4  NA
#  9:  12    5  NA
# 10:  17    6  NA
# 11:  20    6   2
# 12:  20    6   2
# 13:  20    6   2
# 14:  17    7  NA
# 15:  17    8  NA
# 16:  13    9  NA
# 17:  20    9   3
# 18:  20    9   3
# 19:  17   10  NA
# 20:  13   11  NA

一旦你这样做,你可以使用组合选择器,并检查你的长度:

<div class="elm1 include"></div>
<div class="elm2 include"></div>
<div class="elm3 include"></div>

答案 3 :(得分:0)

毋庸置疑,这不起作用。

当然!

为什么:

由于多个class属性。如果发生这种情况,则会忽略一个,而是可以执行此操作:

<div class="elm1 include"></div>
<div class="elm2 include"></div>
<div class="elm3 include"></div>

并且在js中你有一个id的选择器,它不是每个标记。我的建议是使用.filter()方法根据您要检查的班级过滤div,然后您可以从.filter()返回,然后您可以根据需要开展工作。

所以这可以做到:

jQuery('#search-submit').click(function() {
  jQuery('div').filter(function(e, elem) {
    return !jQuery(this).hasClass('include');
  }).addClass('exclude');

  // just a demo:

  $('div').html(function(){
      this.innerHTML = '<pre>'+ this.classList +'</pre>'
  });
 
});
.include {
  color: green;
}
.exclude {
  color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="elm1 include">inclue</div>
<div class="elm2">!include</div>
<div class="elm3 include">include</div>
<br>
<button id="search-submit">Submit</button>

答案 4 :(得分:0)

请注意,您使用了class属性而不是id,依此类推其他内容:

<div class="elm1" class="include"></div>

我认为你的JS代码倾向于使用id而不是class

if (#elm1, #elm2, #elm3)

带有ID的示例工作代码:

$(function() {
  var inc = $('div.include[id^=elm]').length;
  var all = $('div[id^=elm]').length;
  alert(all === inc);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="elm1" class="include"></div>
<div id="elm2" class="include"></div>
<div id="elm3" class="include"></div>

使用类:

示例工作代码

$(function() {
  var inc = $('div.include[class^=elm]').length;
  var all = $('div[class^=elm]').length;
  alert(all === inc);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div class="include elm1"></div>
<div class="include elm2"></div>
<div class="include elm3"></div>