jQuery的最后归还到底是什么?

时间:2011-07-06 15:13:55

标签: jquery return

我必须将javascript和jQuery混合在一起,直到我可以进行适当的重写。看来下面的代码不等同:

    var something = $(".image:last"); // Last element with image class?

    var element = document.getElementById("slideshow"); // HTML UL with images as children
    var lastChild = element.lastChild;

jQuery究竟返回了什么?

P.S:我可能在实际归因方面犯了一个错误。如果是这样的话,请道歉。我对jQuery很新。

5 个答案:

答案 0 :(得分:3)

我相信所有jQuery选择器都返回一个jquery对象 - 而不是一个元素。

我认为如果你选择jquery对象中的第一个项目,你将收到实际的元素,所以:

var something = $(".image:last")[0]

将是您追求的元素。

答案 1 :(得分:3)

jQuery返回一个jQuery对象。在这种情况下,对象表示页面上的元素,但它包含大量额外功能,这些功能在jQuery文档页面上进行了记录:http://docs.jquery.com/Main_Page

我喜欢把jQuery $()函数想象成一种超级英雄斗篷。将斗篷缠绕在页面上的元素周围,它获得了一堆超能力。

尝试使用像Firebug这样的东西来检查你的对象,它会以更有意义的方式显示它们。

答案 2 :(得分:2)

jQuery将返回一个jQuery对象,这就是为什么它们不一样。

因此,两者:

$(".image:last") == $(lastChild)

$(".image:last")[0] == lastChild

当然,假设你在同一个元素上运行这些选择,会给你相同的结果。

通常,$(".image:last")将找到具有image类的所有元素,然后返回它找到的最后一个元素,包装在jQuery对象中。

请注意,它们在技术上并不相同:( {} == {})在JavaScript中为false。 (感谢@ lonesomeday的评论提醒我)。

jQuery对象中第一个包装lastChild,第二个从jQuery对象中获取实际元素。

答案 3 :(得分:1)

$('.image:last')

这告诉jQuery获取类image的所有元素,然后获取最后一个元素。将返回jQuery选择(自定义对象);元素将是选择的唯一成员。

请注意,这会返回最后一个.image元素。

var element = document.getElementById("slideshow");
var lastChild = element.lastChild;

获取标识为slideshow的元素,然后返回最后一个子节点。注意两件事:它返回一个子节点(而jQuery找到了与选择器匹配的最后一个元素)并返回一个节点。元素是一种类型的节点,但文本和注释也是节点。如果元素末尾有空格,那将是lastChild,而不是最后一个子元素。

也许如果你能澄清你想要改变的确切代码,我可以更具体地说明你需要做什么。

答案 4 :(得分:1)

这在很大程度上取决于实际的DOM,这两种方法是否选择相同的元素。

$(".image")将使用类.image选择所有 DOM元素(在整个页面中)。 :last将为您提供集合中的最后一个元素,并将其包装在jQuery对象中。

另一方面:

var element = document.getElementById("slideshow");
var lastChild = element.lastChild;

只会选择#slideshow的最后一个孩子(可能与$(".image:last")[0]相同或不同)。这将返回DOM 节点,而不一定是DOM 元素

例如这里

<div id="slideshow">
<br />
</div>

lastChild是包含换行符的文本节点


所以要记住的事情是:

  • #slideshow可能不包含类.image的所有元素(您可以使用$('#slideshow .image')来限制jQuery中的搜索。

  • element.lastChild可能会返回文本节点,而不是元素节点。您可以遍历以前的兄弟节点,直到找到元素节点,例如:

    var lastChild = element.lastChild;
    while(lastChild.nodeType !== 1 && (lastChild = lastChild.previousSibling));
    
    if(lastChild) {
        // last element node found
    }