2013-11-03 40 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在时间到达时可以接受它。)* –