Javascript 获取具有多个类的元素的特定类名

Javascript 获取具有多个类的元素的特定类名,javascript,jquery,html,Javascript,Jquery,Html,假设我的html中有: <div id="myDiv" class="a b-32"/> 我试图获取'b'类的索引(在我的示例'32'中) 我知道的唯一方法是: var index; var myDiv = $("#myDiv").attr("class"); var classes = myDiv.split(' '); for(var i=0; i<classes.size(); i++){ if(classes[i].matches((b-)+[\d]*)

假设我的html中有:

<div id="myDiv" class="a b-32"/>

我试图获取'b'类的索引(在我的示例'32'中)

我知道的唯一方法是:

var index;
var myDiv = $("#myDiv").attr("class");
var classes = myDiv.split(' ');
for(var i=0; i<classes.size(); i++){
    if(classes[i].matches((b-)+[\d]*) ){
        index = classes[i].replace("b-","");
    }
}
alert(index);
var指数;
var myDiv=$(“#myDiv”).attr(“类”);
var类别=myDiv.split(“”);

for(var i=0;iY'know,尽管人们声称jQuery使它变得更简单,因此您需要编写更少的代码,但它在一行程序方面出人意料地出色:p

alert((document.getElementById('myDiv').className
                                         .match(/(?:^| )b-(\d+)/) || [0,0])[1]);
(为了便于阅读,添加了空格)

如果
myDiv
没有
b-number
类,则返回
0

编辑:正如A.A.沃尔夫在评论你的问题时指出的,你可能想考虑一下:

<div id="myDiv" class="a" data-b="32"></div>

你知道,尽管有人声称jQuery可以让你编写更少的代码,但它惊人地擅长一行代码:p

alert((document.getElementById('myDiv').className
                                         .match(/(?:^| )b-(\d+)/) || [0,0])[1]);
(为了便于阅读,添加了空格)

如果
myDiv
没有
b-number
类,则返回
0

编辑:正如A.A.沃尔夫在评论你的问题时指出的,你可能想考虑一下:

<div id="myDiv" class="a" data-b="32"></div>

正则表达式可以帮助:

var index;
var myDivClasses = $("#myDiv").attr("class");
var cls = myDivClasses.match(/(?:^| )b-(\d+)(?:$| )/);
if (cls) {
    index = cls[1];
}
(如果要将其作为数字,请使用
parseInt


它查找
b-####
,其中
####
是一个或多个数字,两边都有空格或边界(字符串的开头、结尾),并提取数字。

正则表达式可以帮助:

var index;
var myDivClasses = $("#myDiv").attr("class");
var cls = myDivClasses.match(/(?:^| )b-(\d+)(?:$| )/);
if (cls) {
    index = cls[1];
}
(如果要将其作为数字,请使用
parseInt



查找
b-####
,其中
###
是一个或多个数字,带有空格或边界(字符串的开头、结尾)在任意一侧,并提取数字。

问题不是重复为什么在循环中使用int数据类型……您认为在循环中正确吗jQuery@kamesh你是什么意思?@AlexandruSeverin:关于kamesh的评论,你的问题中有
for(inti=0…
。因为这是JS,所以应该是
var
(或者让ES6中的
)@T.j.Crowder感谢我试图说的问题不是为什么在循环中使用int数据类型的重复…您认为它在循环中正确吗jQuery@kamesh你是什么意思?@AlexandruSeverin:关于kamesh的评论,你有
(在你的问题中,int i=0…
。因为这是JS,所以应该是
var
(或者在ES6中是
let
)@T.j.Crowder感谢我试图说的话。注意使用类的
\b
,在类名称中有几个字符是有效的,
\b
将其视为单词边界,
-
是最有问题的。谢谢,这正是我想要的。@T.j.Crowder怎么样?现在好点了?@AlexandruSeverin你很好我很高兴能帮上忙:)哦,data-*属性更好,解决了很多问题。注意在类中使用
\b
,在
\b
视为单词边界的类名中有几个字符是有效的,
-
是最有问题的。谢谢,这正是我要找的。@T.J.Crowder怎么样?现在好多了@不客气,很高兴我能帮上忙:)哦,data-*属性更好,解决了很多问题。