2013-11-03 62 views
0

我一直在這個戰鬥了幾個小時,但它迴避我的理解......jQuery是否創建節點假貨?

var newLabel = $('<div></div>'); 
newLabel.appendTo("#f0"); 
console.log($("#f0").html());  // <br><div></div> 
console.log(newLabel);   // [object Object] 
var div = newLabel.first().get(); 
console.log(div);     // [object HTMLDivElement] 
if(div instanceof HTMLDivElement) { console.log("VALID"); } // 
else { console.log("INVALID"); } // INVALID 
console.log(div.appendChild);  // undefined 

我們使用jQuery創建一個div元素,並將其附加到DOM元素。它進去,檢查。對象打印爲「HTMLDivElement」,檢查。

然而,它失敗了instanceof。此外,它應該有方法appendChild,但它的未定義。 (的確,如果我嘗試打電話,它會報錯。)

這裏發生了什麼?元素jQuery是爲我們創建的,是假的?

+7

'get()'返回一個數組,所以在你的情況下'div'是一個數組(它顯然不是'HTMLDivElement',也沒有'appendChild'方法)。請參閱:http://api.jquery.com/get/#get2。改爲使用'.get(0)'。 –

+1

如果你想看看控制檯上有什麼東西,使用'console.dir(whatever)'而不是'console.log()'。 – Pointy

+0

或者更好,只需在代碼中設置一個斷點並直接檢查該變量。 –

回答

1

get()返回一個數組,所以div是你的情況的陣列(這顯然不是HTMLDivElement也不具有方法appendChild)。請參閱:http://api.jquery.com/get/#get2。如果您使用.get(0)(或僅使用[0]),您將獲得實際的div元素。

+0

*(這只是Felix Kling的評論 - 帶*最小的*加法 - 發佈爲CW [沒有生成代表],OP在時間到達時可以接受它。)* –