2013-07-15 63 views
3

今天我碰到這在一些代碼來:嵌套調用jQuery的

$($($(this).children()[1])).css("border-color", "#fff"); 

我以前從未見過這一點,並盡我的理解,寫了下面將完成同樣的事情:

$(this).children()[1].css("border-color", "#fff"); 

是否有任何目的到頂端的方式(是更好?),或者這只是一個人現在知道他們在做什麼與JQuery?

+0

我認爲沒有理由這樣做。也許他們最初在括號之間有其他東西,但決定刪除那些東西......只是爲了忘記這些東西......否則就沒有意義了。 – Gray

回答

4

第二個表達不會做同樣的事情,因爲訪問一個jQuery集合的數組元素返回DOM節點,而不是一個jQuery對象,你可以不要調用jQuery方法。實際相當於將是:

$(this).children().eq(1).css("border-color", "#fff"); 

第一個代碼就相當於:

var temp = $(this).children()[1]; // Get DOM node of 2nd child 
$(temp).css("border-color", "#fff"); // Wrap it in jQuery object and set CSS 
+0

這是一個重要的區別,謝謝。 – Johannes

+0

@Zenith第一個作品是因爲下標表達式返回一個DOM節點,'jQuery(節點)'將這個節點包裝在一個jQuery對象中。 – Barmar

+1

第一個還沒有額外的'$'? – Johannes

1

這些都會做同樣的事情,只是第一個選項是慢得多。

同:

$(this).children().eq(1).css("border-color", "#fff"); 
1

這是不是更好。如果有的話 - 效率不高。在代碼中使用.eq(1)以使其工作。

更妙的是(最有效的):

$(this).children()[1].style.borderColor = '#fff'; 
1

我懷疑你的代碼工作....因爲.css是一個jQuery方法和$(this).children()[1]返回DOM元素,這將有沒有方法調用.css() ..

第一種方法是慢,messy..however它工作,因爲它是包裝的DOM元素與$()使用它作爲jquery的objec噸..我相信一個額外的(外部)$()在第一個例子是根本不需要的。

$($(this).children()[1]).css("border-color", "#fff"); //this should work 

可以通過使用first()

$('div').children().first().css("color", "red"); 

eq()

$(this).children().eq(1).css("border-color", "#fff"); 
2

在第一個例子中的唯一原因它是[0]從陣列返回得到的結果的' 0'索引的元素出jQuery對象數組(AKA:集合)。

$('p')[0].hide(); // will NOT work 

[0]是JS 吸氣從陣列,像jQuery的.get()法)

這就是爲什麼它重新包裝的jQuery功能

$($('p')[0]).hide(); // Hides the '0' <p> element 

您也可以在裏面將jQ對象封裝到其他對象中*

$($($($($('p'))))).hide(); 

*這是unneded,redundand,速度慢,錯誤在任何情況下

簡歷:

$($('p')[0]).hide();  // WORKS! cause the JS HTMLelement is 
          // again wrapped into an jQ Object 

$($('p').get(0)).hide(); // WORKS (same reason) 

$('p')[0].hide();   // WRONG! returns the unoperable (by jQ) JS Object 
          // HTMLelement, not a jQuery object 

$('p').get(0).hide();  // WRONG! (same reason) 

$($($($($('p')[0])))).hide();  // WTH?! 

遊樂場:http://jsbin.com/enawup/3/edit

+1

感謝您提供的其他信息數組的東西,絕對有幫助! – Johannes