2013-04-17 166 views
0

我有這樣幾個元素的網站:如何通過屬性值從jQuery對象中獲取特定元素?

<g class="box" rel="1">...</g> 
<g class="box" rel="2">...</g> 
<g class="box" rel="3">...</g> 
<g class="box" rel="4">...</g> 
<g class="box" rel="5">...</g> 

在我的代碼我想換一個循環這些元素的某些屬性。我已經在第一次做的是這個(正常工作對我來說):

for(var i = 0, l = relValList.length; i < l; i+=1){ 
    $(".box[rel=" + relValList[i] + "]").children().first().attr("fill","#000000"); 
} 

現在,我已經讀了jQuery的最佳做法的文章,在那裏我發現了一些所謂的緩存來提高性能。

所以我試了一下。

//call this when page loaded 
var boxes = $(".box"); 

//the good old loop 
for(var i = 0, l = relValList.length; i < l; i+=1){ 
    //here is my problem 
    boxes ???? 
} 

什麼是通過rel屬性獲取特定元素的最佳方式?

謝謝!

回答

0

嘗試filter。它將選擇器應用於現有的jQuery選擇。

box.filter("[rel=" + relValList[i] + "]").children().first().attr("fill","#000000"); 

另外,你甚至不需要在框中循環。您可以匹配具有rel屬性這樣每個箱子的第一個孩子:

$('.box[rel] :first-child').attr("fill","#000000"); 
+0

它是。否則每次迭代都會發生類似的事情,就像發生一次一樣。一次比n次快。 –

+0

謝謝!這正是我正在尋找的!完美的作品,我得到了更好的性能(在移動Safari,iPad 1上測試)。 –

+0

@DennisDittert你非常歡迎 –

2

您可以使用filter方法,它通過選定的元素進行迭代,並返回匹配的。方法比鏈式字符串選擇器快得多。

var $boxes = $(".box"), 
    $goldenOnes = $boxes.filter('[rel="golden"]'); 
相關問題