jQuery:从逗号分隔的选项列表中获取值

时间:2014-02-03 14:42:35

标签: javascript jquery

我觉得它非常简单,但在星期一这真的很难。 ^^

我有一些像这样的HTML(它的修复 - 这里不能改变任何东西):

<a class="boxed" href="#foo" rel="type: 'box', image: '/media/images/theimage.jpg', param3: 'title here'">bar</a>

要使用var $(this).attr('rel');轻松获取rel的值,但如何在此列表中获取图像或标题的值?肯定的分裂会起作用,但我认为有更好的方法......

3 个答案:

答案 0 :(得分:1)

var rel = $('.boxed').attr('rel');
var arr = rel.split(',');
$.each(arr, function() {
    alert(this.split(':').pop());
});

<强> JSFIDDLE DEMO

答案 1 :(得分:0)

有很多方法可以做到这一点,这里只是使用正则表达式来匹配组。

var str = "type: 'box', image: '/media/images/theimage.jpg', param3: 'title here'";
var re = /\s?([^:]*):\s'([^']*)',?/;
var result;
var prop = {};
while ((result = re.exec(str)) !== null) {
    prop[result[1]] = result[2];
    str = str.replace(re,"");
}
console.log(prop);

使其成为JSON有效字符串并使用解析

的另一种方法
var str = "type: 'box', image: '/media/images/theimage.jpg', param3: 'title here'";
var re1 = /(^|,\s)([^:]*)/g;
var re2 = /'/g;
var json = "{" + str.replace(re1,'$1"$2"').replace(re2,'"') + "}";
var prop = JSON.parse(json);
console.log(prop);

答案 2 :(得分:0)

Split在这里工作得很好......如果你想要一个关联数组:

var str = "type: 'box', image: '/media/images/theimage.jpg', param3: 'title here'";
var arr = str.split(',');
var answer = {};

for (var i = 0, len = arr.length; i < len; i++) {
    var values = arr[i].split(':');
    answer[values[0].trim()] = values[1].trim();
}

但@epascarello的正则表达式解决方案比这更好。