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

时间:2014-04-18 05:19:17

标签: jquery

我需要检查一下是否有某个类(可能有几个不同的类),如果它确实得到了它,并将它拆分成一个数组。

例如:

 <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
 }

希望这是有道理的。

由于

2 个答案:

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