如何使用jquery选择元素的类是否具有特定字符串的开始和结束?

时间:2017-02-01 13:10:01

标签: javascript html class-attributes jquery

我使用像

这样的类得到了几个div
  • .wrap -1-附加-1
  • .wrap -2-附加-1
  • .wrap -3-附加-1

我想选择所有这些并使用if ( $(this).hasClass() )检查其中的一个。目前我只检查一个班级。如何查看所有这些内容,例如.hasClass('wrap-*-addon-1')

最好的问候。

6 个答案:

答案 0 :(得分:16)

您可以合并两个jquery Attribute Starts With Selector [name^=”value”]Attribute Ends With Selector [name$=”value”]来完成这项工作。

$('div[class^="wrap-"][class$="-addon-1"]')



$('div[class^="wrap-"][class$="-addon-1"]').css("color", "red");

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrap-1-addon-1">wrap-1-addon-1</div>
<div class="wrap-2-addon-1">wrap-2-addon-1</div>
<div class="wrap-3-addon-1">wrap-3-addon-1</div>
<div class="wrap-3-addon-2">wrap-3-addon-2</div>
&#13;
&#13;
&#13;

答案 1 :(得分:4)

您可以使用支持多个课程的.is(),不幸的是.hasClass()一次仅适用于一个课程。

示例:

element.is('.wrap-1-addon-1, .wrap-2-addon-1, .wrap-2-addon-1')

答案 2 :(得分:4)

您可以使用starts with selector

$('div[class^="wrap"]')

JsFiddle demo

答案 3 :(得分:3)

最好添加另一个类并选择此类。然后,您可以使用正则表达式进行测试。

$el = $(".wrap");

$el.each(function() {
  var test = /wrap-[1-3]-addon-1/.test($(this).attr("class"));
  $(".result").html(test);
  console.log(test);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrap-1-addon-1 wrap"></div>
<div class="wrap-2-addon-1 wrap"></div>
<div class="wrap-3-addon-1 wrap"></div>
  
<div class="result"></div>

答案 4 :(得分:2)

从此answer激发正则表达式匹配:

&#13;
&#13;
Input = Table
Output would = T8a9b6l2e4
&#13;
var $ele = $("div:first");

alert(matchRule($ele.attr('class'),'wrap-*-addon-1'))


function matchRule(str, rule) {
  return new RegExp("^" + rule.split("*").join(".*") + "$").test(str);
}
&#13;
&#13;
&#13;

答案 5 :(得分:2)

这可能会对你有帮助,我使用正则表达式来解决当前元素的类是否适合所需的模式。

我假设您要检查的课程超过3个。 这个模式用于wrap-1-addon-1到wrap-n-addon-1,n是一些数字

&#13;
&#13;
function hasMyClass(elm) {
  
var regex = /(wrap-)+(\d)+(-addon-1)/i;// this is the regex pattenr for wrap-*-addon-1
  
var $this = $(elm);
var myClassesStr = $this.attr('class');
if(myClassesStr) { // if this has any class
  var myClasses = myClassesStr.split(' '); // split the classes
  for(i=0;i<myClasses.length;i++) { // foreach class
      var myClass = myClasses[i]; // take one of classes
      var found = myClass.match(regex); // check if regex matches the class
    
      if(found) {
          return true;
        }
    }
}
  
return false;
}



function test() {
    $('#container div').each(function(){
      var $this = $(this);
      $('#pTest').append('<br/>test result for ' + $this.attr('id') + ':' + hasMyClass(this)); 
      // hasMyClass(this) is the sample usage
    })
  }
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container">
  <div id="div1" class="wrap-1-addon-1 anotherClass">div1 (wrap-1-addon-1)</div>
  <div id="div2"  class="wrap-2-addon-1 anotherClass anotherClass2">div2 (wrap-2-addon-1)</div>
  <div id="div3"  class="wrap-3-addon-1 anotherClass">div3 (wrap-3-addon-1)</div>
  <div id="div4"  class="anotherClass">div4 (none)</div>
</div>
<button id="testBtn" onclick="test();" type="button">TEST</button>

<p id="pTest" >...</p>
&#13;
&#13;
&#13;