我想从元素的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
我应该使用正则表达式,因为w
和h
值将会改变。
我怎样才能在indexOf中使用正则表达式?
对不起,我的英语不好
编辑:
if (attr.indexOf('b')) {
blank = true;
}
首先,这不是一种非常优雅的数据检索方式。无论如何,如果你真的想以这种方式做到这一点,那么你可以使用如下的正则表达式:
var matches = $(this).attr('rel').match(/w=(\d+)/);
var w = (matches && matches[1]) || defaultValue;
此外,如果有多个元素以'w'结尾,那么您最好将正则表达式更改为:
var matches = $(this).attr('rel').match(/(?:^|\|)w=(\d+)/);
我也会建议使用自定义属性,但是这些属性并不像你想要的那样符合w3。
一种简单的方法是拆分参数然后循环并检查每个索引是否是您期望的属性之一:
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
}
}
我希望这不违反我不知道的一些好习惯,因为我总是觉得当我做这种事情时必须有一种更优雅的方式:)因为它是我得到一种快速和肮脏对此有所感受。
抱歉,你无法用普通的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
。
免责声明..代码尚未测试。
像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') + ')')
)