检查 body 是否有一个以 开头的类,然后将其拆分为数组



我需要检查主体是否具有某个类(可能有几个不同的类(,如果确实得到它,并将其拆分为一个数组。

例如:

 <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_"开头的类,然后将其拆分为下划线并将属性添加到对象中。

最新更新