2014-02-28 63 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