将空格分隔的类列表转换为Jquery选择器的有效方法?

时间:2014-12-15 19:36:49

标签: javascript jquery regex

是否有一种快速,可靠的方法来转换空格分隔的类列表,如:

classOne classTwo classThree

到选择器,如:

$('.classOne .classTwo .classThree')

我认为可以使用构建选择器字符串的循环或一系列正则表达式(一个用于清理额外的空格,另一个用于将[space]转换为{{1} }),但我想知道是否有内置方式,或更简洁/有效/聪明的东西。

5 个答案:

答案 0 :(得分:5)

不确定

var klass = "classOne classTwo classThree";
var arr   = klass.split(/\s+/);
var sel   = '.' + arr.join(' .');

$(sel)

FIDDLE

或更直接

$('.' + 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)

基于this other answer

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

适用于

  • 未修剪的字符串(开头)。
  • “奇怪”类字符(/$*等。)
  • 以数字开头的类(无效标识符)