2011-10-05 50 views
2

我正在處理我的Stretchbox Plugin並試圖優化和縮短代碼。 我已經使用jquery數據方法將數據附加到某些div。 例如:查找jquery中的數據

$('#thumbs div:last-child').data('active', true) 

它將某個div設置爲激活狀態。 如果我知道要找到這個div,我要檢查每個.thumb類 ,以便找到它:

$('.thumb').each(function() { 
    if($(this).data('active')){ 
     //Do Stuff 
    } 
} 

這工作得很好,但我敢肯定應該有一個更簡單的方法,因爲檢查每個單獨的.thumb div(10-30之內)也需要一些性能。

回答

0

據我所知,沒有其他方法可以做到這一點。但是,您可以創建一個新的jQuery選擇器。我打算給它一個鏡頭,但它看起來像someone has already thought of it(向下滾動到「查詢元素數據」)。

它可以讓你做這樣的事情:

$(':data(active)'); //Selects all elements with "active" data 

它可能不會是快,但它可能使你的代碼更簡潔!

+0

我相信[this](http://stackoverflow.com/questions/2891452/jquery-data-selector/2895933#2895933)是一個更好,更廣泛的選擇器。 :) – Shef

+0

好的發現!我剛剛鏈接到我發現的第一個,並沒有再看! –

1
$(".thumb[data-active='true']"); 
+0

數據被設置與'$。數據()'[將無法使用屬性選擇器(http://jsfiddle.net/Shef/unALg/)。 – Shef

+0

我其實並不知道你不能選擇用$ .data設置的屬性。謝謝你指出,我會留下答案,讓其他人至少知道什麼是錯的(upvote也是沒有意義的)。 –

0

我錯過了什麼嗎?只要將它保存在一個變量:

jQuery(function($){ 
    var activeDiv = []; 

    $('#selector').click(function(){ 
    activeDiv = $('#thumbs div:last-child') 
    ... 
    }); 

    $('#executor').click(function() { 
    activeDiv.each(function() { 
     ... 
    }); 
    } 
}); 
+0

這當然工作,但正如我已經提到的,我打算使用數據方法,因爲我也將它用於其他功能,因此正在尋找更快的方法。不管怎麼說,還是要謝謝你! – Janik

+0

@Janik:恐怕這有點像說你喜歡用錘子來驅動螺絲。數據方法用於將數據附加到DOM元素以供稍後由插件檢索。它不能加速DOM搜索。 –

+0

好吧,認爲這可能是另一個好辦法。感謝提示。 – Janik