2011-04-26 47 views
4

请解释[0]在此代码:为什么要把[0]放在儿童的结果上(':first')?

$(function(){  
    var $cont = $('#cont');  
    var $el = $cont.children(':first'), el = $el[0];  
}); 

我尝试了一些“警报”查找的文字,但我真的不明白,为什么我们精确的指标,而我们已经知道,我们”重新指向div的“第一个”孩子......?

+1

.children是否返回包含第一个元素(包含所有jQuery功能)和[0]返回HTML元素本身的jQuery对象。 – CharlesLeaf 2011-04-26 20:50:43

回答

6

在上述例子中,$el是含有由:first选择确保一种元素的jQuery对象。另一方面,el包含$el jQuery对象中第一个(也是唯一)项的底层DOM元素。

您可以访问el变量的原生属性,如.innerHTML。您可以使用$el上支持的所有jQuery操作,如$el.html()

+0

谢谢!所以为什么,我的意思是,在jQuery对象中定位元素的目的是什么?我们需要什么样的例子来定位javascript元素? jQuery的处理方式与“普通”相同,不是吗? – Paul 2011-04-26 23:51:59

+0

jQuery实现了自己的函数,完全包装了DOM元素,你不能在jQuery对象上使用本地属性,就像我上面使用'innerHTML/html()'的例子。如果您将它们传递给不支持jQuery的JavaScript库,在解决方案发布之前解决jQuery中的错误,使用特定于浏览器的功能或其他任何方法,您可能需要原始元素。在库中有一个选项来展开和获取原始对象总是很不错的。 – DarthJDG 2011-04-27 08:09:36

+0

好吧非常感谢! – Paul 2011-04-27 11:27:53

1

所有的jQuery查询都会返回一个匹配的所有对象的列表。 :first不保证单个结果,因此[0]抓取单个元素。

+0

谢谢!好吧,如果我们定位一个div的id,并且我们把“first”放在它上面,我们确信它只会匹配“one”元素,第一个元素,不是? – Paul 2011-04-26 23:55:22

+0

@Paul,取决于。使用':first'但返回多个元素的简单查询是'ul li:first'。该查询返回每个“ul”标签的第一个“li”标签,但页面上可能会有多个“ul”标签(因此返回多个结果)。这个查询更隐蔽的版本是'$(“ul”)。find(“li:first”)'。同样的事情,但很难看到有多个结果。 – riwalk 2011-04-27 01:01:27

+0

好吧非常感谢! – Paul 2011-04-27 11:28:44

1
var $el = $cont.children(':first') 

如果选择器的匹配,即让您与匹配元件一个阵列状物体。你想要的是匹配元素 - 这就是为什么你使用[0] - 得到返回的“数组”的第一个元素(并且只有)元素。

这基本上是等之间的差异:[element]element(式中,[element][0] = element

1

[0]与使用get(0)来获取DOM元素而不是jQuery元素是一样的。

2

jQuery对象通常包含DOM节点的集合/数组。举例来说,如果你是遍历一个jQuery对象,如 -

$('div').each(function() { 

    //In this context, this refers to the DOM node 
    //and $(this) refers to a jQuery object for that particular DOM node 
    //therefore $(this)[0] == this 

    this.innerHTML = 'foo'; 
    $(this).html('foo'); 
    $(this)[0].innerHTML = 'foo'; 

}); 

您还可以使用.get()有同样的效果。

//retrieves an array of native DOM nodes using jQuery 
var allDivNodes = $('div').get(); 

//retrieves the first node retrieved by the selector 
var firstDiv = $('div').get(0); 

//this is the same as get(0), however, using an array accessor can throw an exception 
var firstDiv = $('div')[0]; 
+0

谢谢!所以为什么,我的意思是,在jQuery对象中定位元素的目的是什么?我们需要什么样的例子来定位javascript元素? jQuery的处理方式与“普通”相同,不是吗? – Paul 2011-04-26 23:53:40

+0

大部分情况下,您不需要。但浏览器可能会有稍微不同的DOM实现,属性/方法可能会有所不同。有时需要使用本地节点本身。 – 2011-04-27 00:19:59

+0

好的谢谢! – Paul 2011-04-27 11:28:15