我需要检查主体是否具有某个类(可能有几个不同的类(,如果确实得到它,并将其拆分为一个数组。
例如:
<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
}
希望这是有道理的。
谢谢
你可以用正则表达式很容易做到这一点:
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]
中删除一元加号运算符。
如果你为"数组"命名了属性,听起来你想使用一个对象,但你想要这样做的方式是这样的:
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_"开头的类,然后将其拆分为下划线并将属性添加到对象中。