0

我想从元素的 rel 属性中获取我的程序参数,首先它是否合乎逻辑?

并且 rel 属性可能包含这个字符串rel="_p|b|w=300|h=200"or rel="_p|w=300" ,所以我使用 split 来分割我的字符串 | 图案 :

var attr = $(this).attr('rel').split('|');

for_p并且b没有问题,因为我可以检查indexOfbut forw并且h我应该使用正则表达式,因为wandh值会发生变化。

如何在 indexOf 中使用正则表达式?

对不起,我的英语不好

编辑:

if (attr.indexOf('b')) {
        blank = true;
    }
4

4 回答 4

0

首先,这不是一种非常优雅的数据检索方式。无论如何,如果你真的想这样做,那么你可以使用正则表达式,如下所示:

var matches = $(this).attr('rel').match(/w=(\d+)/);
var w = (matches && matches[1]) || defaultValue;

此外,如果可以有多个以“w”结尾的元素,那么你最好将你的正则表达式更改为:

var matches = $(this).attr('rel').match(/(?:^|\|)w=(\d+)/);
于 2012-04-25T22:21:18.307 回答
0

我也会建议使用自定义属性,但是这些不会像你想要的那样符合 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
    }
}

我希望这不会违反我不知道的一些好的做法,因为我总是觉得当我做这种事情时必须有一种更优雅的方式:) 因为它是我得到一种快速而肮脏的对此感到。

于 2012-04-25T22:29:58.563 回答
0

像 Paolo Bergantino 一样,我也建议使用数据属性,或者您可以将数据存储在 JSON 中(同样,在数据属性中)并解析:

<a href="#" data-info='{"width": "300", "height": "200", "color": "#fff", "etc": "foo"}'>

var info = JSON.parse(a.getAttribute('data-info'));

编辑:替换eval为 Phrogz 的建议。

eval('(' + a.getAttribute('data-info') + ')')(带评估:)

于 2012-04-25T22:30:58.677 回答
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用所有赋值参数创建一个数组。

免责声明..代码尚未测试。

于 2012-04-25T22:39:49.300 回答