是否有一种快速,可靠的方法来转换空格分隔的类列表,如:
classOne classTwo classThree
到选择器,如:
$('.classOne .classTwo .classThree')
我认为可以使用构建选择器字符串的循环或一系列正则表达式(一个用于清理额外的空格,另一个用于将[space]
转换为{{1} }),但我想知道是否有内置方式,或更简洁/有效/聪明的东西。
答案 0 :(得分:5)
不确定
var klass = "classOne classTwo classThree";
var arr = klass.split(/\s+/);
var sel = '.' + arr.join(' .');
$(sel)
或更直接
$('.' + klass.split(/\s+/).join(' .') )
答案 1 :(得分:3)
简单,使用.replace
:
var className = 'classOne classTwo classThree';
$(className.replace(/(^ *| +)/g, '$1.'));
答案 2 :(得分:2)
这个紧凑的RegEx:
var className = 'classOne classTwo classThree';
$(className.replace(/\b(\w)/g, '.$1'));
这将使用点+单词(例如:some classes
)替换类列表中的每组单词字符(例如:.some.classes
),然后将结果直接粘贴到jQuery选择器。< / p>
答案 3 :(得分:0)
如果您不喜欢正则表达式:
var className = "classOne classTwo classThree";
var selector = className.split(" ").map(function (_class) {return "." + _class}).join(" ");
您可以使用空格分割className
,然后使用Array.prototype.map
创建新数组([".classOne", ".classTwo", ".classThree"]
)。然后你再次加入空格。
答案 4 :(得分:0)
var selector = className
.replace(/(?=[^ \w])/g, '\\') // Escape non-word characters
.replace(/\b\d/g, '\\00003$&') // Escape digits at the beginning
.replace(/(^| +)(?!$| )/g, '.') // Add "." before classes, removing spaces
适用于
/
,$
,*
等。)