我需要检查一下是否有某个类(可能有几个不同的类),如果它确实得到了它,并将它拆分成一个数组。
例如:
<body class="someclass s_windows_8">
到目前为止,我只有班级检查工作:
var software = [];
if($("body").is('body[class*=" s_"]')) {
software["name"] = //windows out of s_windows_8
software["version"] = //8 out of s_windows_8
}
希望这是有道理的。
由于
答案 0 :(得分:0)
您可以使用正则表达式轻松完成此操作:
var software = {},
allClasses = document.body.className,
details = allClasses.match(/(?:^| )s_([^_]+)_(\d+)(?: |$)/);
if (details) {
software["name"] = details[1];
software["version"] = +details[2];
} else {
// error, there was no class matching the pattern
}
如果版本“number”需要允许非数字版本(如“2b”),则将正则表达式更改为:/(?:^| )s_([^_]+)_([^ ]+)(?: |$)/
,并从+details[2]
中删除一元加运算符。
答案 1 :(得分:0)
如果您为“数组”命名了属性,那么听起来您想要使用对象,但您希望这样做的方式如下:
var software = {};
if($("body").is('body[class*=" s_"]')) {
var classes = $("body").get(0).className;
classes = classes.split(' ');
var classArr = [];
for (var c = 0; c < classes.length; c++) {
if (classes[c].contains('s_') {
classArr = classes[c].split('_');
}
}
software["name"] = classArr[1]; //windows out of s_windows_8
software["version"] = classArr[2] //8 out of s_windows_8
}
如果您只使用支持的浏览器,也可以使用node.classList
这是类的数组,但className只是拉出节点上定义的所有类的字符串
将为您提供以's_'开头的类,然后将其拆分为下划线并将属性添加到对象。