今天我碰到這在一些代碼來:嵌套調用jQuery的
$($($(this).children()[1])).css("border-color", "#fff");
我以前從未見過這一點,並盡我的理解,寫了下面將完成同樣的事情:
$(this).children()[1].css("border-color", "#fff");
是否有任何目的到頂端的方式(是更好?),或者這只是一個人現在知道他們在做什麼與JQuery?
今天我碰到這在一些代碼來:嵌套調用jQuery的
$($($(this).children()[1])).css("border-color", "#fff");
我以前從未見過這一點,並盡我的理解,寫了下面將完成同樣的事情:
$(this).children()[1].css("border-color", "#fff");
是否有任何目的到頂端的方式(是更好?),或者這只是一個人現在知道他們在做什麼與JQuery?
第二個表達不會做同樣的事情,因爲訪問一個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
這些都會做同樣的事情,只是第一個選項是慢得多。
同:
$(this).children().eq(1).css("border-color", "#fff");
這是不是更好。如果有的話 - 效率不高。在代碼中使用.eq(1)
以使其工作。
更妙的是(最有效的):
$(this).children()[1].style.borderColor = '#fff';
我懷疑你的代碼工作....因爲.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");
在第一個例子中的唯一原因它是[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?!
感謝您提供的其他信息數組的東西,絕對有幫助! – Johannes
我認爲沒有理由這樣做。也許他們最初在括號之間有其他東西,但決定刪除那些東西......只是爲了忘記這些東西......否則就沒有意義了。 – Gray