我必须将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很新。答案 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
}