我想从元素的rel属性中获取我的程序参数,首先是逻辑吗?
并且rel属性可能包含此字符串rel="_p|b|w=300|h=200"
或rel="_p|w=300"
,所以我使用split将我的字符串拆分为|模式:
var attr = $(this).attr('rel').split('|');
_p
和b
没有问题,因为我可以查看indexOf
但w
和h
我应该使用正则表达式,因为{ {1}}和w
值将会更改。
如何在indexOf中使用正则表达式?
抱歉我的英文不好
编辑:
h
答案 0 :(得分:0)
首先,这不是一种非常优雅的数据检索方式。无论如何,如果你真的想以这种方式做到这一点,那么你可以使用如下的正则表达式:
var matches = $(this).attr('rel').match(/w=(\d+)/);
var w = (matches && matches[1]) || defaultValue;
另外,如果有多个元素以'w'结尾,那么你最好将你的正则表达式改为:
var matches = $(this).attr('rel').match(/(?:^|\|)w=(\d+)/);
答案 1 :(得分:0)
我会建议使用自定义属性,但是这些属性并不像你想要的那样符合。
一种简单的方法是拆分参数,然后遍历并检查每个索引是否是您期望的属性之一:
var cust_params = $(this).attr('rel').split('|'); //or this.rel as GGG suggested in a comment?
for(var i=0;i<cust_params.length;i++) {
if('_p'==cust_params[i]) {
//...
}
//...
if(cust_params[i].match(/w=(\d+)/)) {
//you could even do this without a regular expression
}
}
我希望这并没有违反我不知道的一些好习惯,因为我总是觉得当我做这种事情时必须有一种更优雅的方式:)因为它是我得到一种快速 - 对此感到肮脏。
答案 2 :(得分:0)
与Paolo Bergantino一样,我也建议使用数据属性,或,您可以将数据存储在JSON中(同样,在数据属性中)并解析:
<a href="#" data-info='{"width": "300", "height": "200", "color": "#fff", "etc": "foo"}'>
var info = JSON.parse(a.getAttribute('data-info'));
编辑:用Phrogz的建议替换eval
。
(使用eval:eval('(' + a.getAttribute('data-info') + ')')
)
答案 3 :(得分:0)
很抱歉,你无法使用普通的javascript在一个命令中执行此操作,indexOf只是不支持正则表达式。
您可以循环访问数组,也可以使用jquery
支持的数组命令。
例如:如果您拥有数组attr
,则可以使用jQuery.grep()
http://api.jquery.com/jQuery.grep/
a_equal = jQuery.grep(attr, function(a, i){
return (a.match(/=/) and i > 0); // modify this as you like
});
使用所有赋值参数创建数组a_equal
。
免责声明..代码尚未经过测试。