2014-07-23 161 views
1

http://jsfiddle.net/9G6NM/通過索引

console.log($('.square').css('background-color')); // red 
console.log($('.square')[1].css('background-color')); // error 
console.log($('.square')[2].css('background-color')); // error 

如何通過jQuery檢索綠色和藍色方塊的屬性獲取與類特定元素?

+1

托架陣列存取返回的DOM元素和不JQ uery元素。正如許多人已經建議的那樣,儘管徹底性似乎包含了某些,呃,*可疑的問題,請使用.eq()請參閱[.get()](http://api.jquery.com/get/) – NullPointer

回答

4

你應該使用eq

console.log($('.square').css('background-color')); 
console.log($('.square').eq(1).css('background-color')); 
console.log($('.square').eq(2).css('background-color')); 

的問題是,css是jQuery的對象的方法。但是如果你使用括號表示來訪問單個元素,你會得到「真實」的,沒有任何jQuery包裝。

或者,您可以:

  • 在jQuery對象再次把它包(昂貴,不推薦):

    $($('.square')[1]) 
    
  • 使用香草JS獲取其風格:

    $('.square')[1].style.backgroundColor; // Only to get inline styles 
    getComputedStyle($('.square')[1]).backgroundColor; 
    
+1

+1 *方法(用jQuery重新從jQuery集合中包裝DOM節點.. * *爲什麼?*)。 –

+0

@DavidThomas我已經收到警告。但是,如果性能很重要,則不應使用jQuery。 – Oriol

+1

@Oriol IMO David的觀點是有效的。 **使用jQuery不應該妨礙它的有效使用。**僅僅因爲框架本身可能有些沉重,應該避免將代碼複雜化,這很容易變得更加高效。例如,jQuery的開銷與非jQuery代碼相比可能很小,而這些代碼可能會寫入很差的O(n^2)。無論如何,這是一個很好的答案,+1更新你的答案來解釋DOM對象vs jquery對象。 – AaronLS

3

使用eq()

console.log($('.square').eq(1).css('background-color')); 

的方括號檢索從jQuery集合,而不是在該索引點jQuery對象的DOM節點。

參考文獻:

1
$($('.square')[1]).css('background-color') 

名爲.css需要一個jQuery對象,而[1]給你一個DOM對象,所以你必須使用$()將其轉換爲jQuery對象(不知道這是正確的術語)

http://jsfiddle.net/9G6NM/2/

+0

哎呀,你再次,我不知道你爲什麼刪除了你的評論,所以使它成爲答案哈哈 – Starkers

+0

我不是100%肯定它會工作,但後來我決定jsfiddle它來驗證並轉換爲答案:) – AaronLS

0

另一個選項出現是這樣的:

http://jsfiddle.net/9G6NM/1/

console.log($($('.square')[0]).css('background-color')); // red 
console.log($($('.square')[1]).css('background-color')); // green (dark) 
console.log($($('.square')[2]).css('background-color')); // blue 
+0

這是一個選項,但它是一個毫無意義的昂貴選項,從元素集合中創建一個jQuery對象,從該集合中檢索DOM節點,然後用jQuery包裝它... –

+0

很酷,謝謝David – Starkers