2014-02-28 60 views
1

这更像是一个'可以发生这种事情'的问题。动态数据属性

我正在设置本地存储以记住该人正在处理的标签。我的问题是,他们想要记住他们在特定项目中所做的不同项目。

为了保存这些标签,我在标签本身上设置了一个数据属性,然后在jQuery中调用它来显示其他标签。

理想情况下,尽管我想让数据属性具有动态名称。我可以很容易地在html中设置它,通过拉入项目ID,但我试图找出是否有可能使用该函数在jQuery中调用该数据属性。

所以在我的HTML我有一些看起来像这样

data-tab{{id}}="name" 

,然后我打电话给他们这样没有ID。但是现在我用一个独特的名字,我不确定如何在不复制函数的情况下抓住这个属性来调用十亿次,这在这种情况下是不可能的。

$(this).attr('data-tab'); 

任何帮助都会很棒!

回答

1

这符合一个正则表达式的所有元素的属性和获得第一场比赛的价值。

var value = $(this.attributes).filter(function() { 
    return this.name.match(/^data-tab/); 
}).val(); 

alert(value); 

http://jsfiddle.net/tN3gj/

+0

这太棒了!非常感谢你的帮助! – zazvorniki

0

在您的JavaScript中,参数attr只是一个字符串。所以,如果你想用一个动态的名字,只是做一个字符串:

var id = 6; 

console.log($(this).attr('data-tab' + id)); 
// this is the same as .attr('data-tab6'); 

...还是我误解你的问题?

+0

那么,这会工作,如果我只有几个ID的,但我有几千年,它总是不断增加。我真的是要动态地做到这一点,所以它可以以某种方式从HTML中拉出id,然后我可以插入它。 – zazvorniki

+0

@zazvorniki这只是一个例子。我并不是建议你在JavaScript中对'id'进行硬编码。当然,你可以从HTML获得'id',但是你没有给我们任何HTML处理。为什么不做一个小提琴,以便我们可以看到你实际上有什么? –

1

你可能尝试这种方式:

$.fn.getDynamicAttrVal = function(attrMatch){ 

    if(!attrMatch)return; 

    var data = this.data(), //Get the data for the element 
     keys = Object.keys(data), //Get all the keys which are attribute names 
     value; 


    $.each(keys, function(_, key){ 
    if(attrMatch.test(key)){ //Test for the pattern passed in against the key 
     value = data[key]; //If found get the value 
     return false; //break the loop; 
    } 
    }); 

    return value; 
} 

并调用它为:

$('elmSel').getDynamicAttrVal(/tab*/); 
$('elmSel2').getDynamicAttrVal(/tab*/); 

JSBin

+0

这个解决方案比我的整洁!特别是如果@zazvorniki除了'data-tab'之外还有更多的动态属性。 – Koen