我开始学习jquery,基本上jquery的很多方面都让我感兴趣。现在,我最近一直在用jquery编写小的代码片段,现在我已经很舒服了。
我有一个小小的好奇心,看看下面的代码:
<a href="#">Click here</a>Jquery代码::
elem_jquery = $('a');
elem_js = $('a')[0];
console.log(elem_jquery);
console.log(elem_js);现在,elem_jquery打印以下内容:
Object { 0: <a>, length: 1, prevObject: Object, context: HTMLDocument → jquery-object.html, selector: "a" }elem js输出以下内容:
<a href="#">我真正想知道的是,jquery是如何将
<a href="#"> 转到
Object { 0: <a>, length: 1, prevObject: Object, context: HTMLDocument → jquery-object.html, selector: "a" }?
这跟sizzle有关系吗?
发布于 2015-06-21 03:40:58
jQuery不会将html元素转换为对象。它所做的是获取对dom元素的引用,并将其包装在jQuery对象中。原始的dom元素仍然在jQuery对象中。
发布于 2015-06-21 03:42:08
Sizzle是jQuery中的选择器引擎;这意味着它允许jQuery根据.className或#idName之类的字符串或element[attr='value']等更复杂的字符串来查找DOM元素。
因此,当您运行$(selector)时,jQuery使用sizzle查找与该查询匹配的所有DOM元素,然后将它们返回到一个jQuery对象中。(通常,这些DOM元素在JavaScript中表示为HTMLElement objects。这就是您在访问$(selector)[0]时所获得的。)
现在,您可以在jQuery对象上运行$(<css-selector>).html()、$(<css-selector>).css()等函数,这反过来会影响包装的DOM元素,并且为了始终获得对包装的HTMLElement object的访问,jQuery提供了这些[<index>],如$(selector)[0]。
发布于 2015-06-21 03:51:46
$('a')是一个选择器。jQuery获取它并查找所有anchor元素,然后返回一个对象及其结果。这就是为什么它的属性长度是1的原因,它只找到了一个。
通过执行$('a')[0],您可以告诉jQuery获取DOM元素本身。这等同于可读性更好的$('a').get(0)。
但是如果使用$('a').first(),您将获得另一个代表锚DOM对象的jQuery对象。这样做的好处是可以做像$('a').first().attr('href')这样的事情--它返回href属性。
基本上,jQuery创建的对象可以做一些事情,让你的工作变得更容易,你的代码比纯粹丑陋的javascript更具可读性。
https://stackoverflow.com/questions/30958067
复制相似问题