jQuery 对象是一个 类数组对象,含有连续的整形属性、length 属性和大量的 jQuery 方法。
jQuery 对象由构造函数 jQuery() 创建, $() 则是 jQuery() 的缩写。
构造函数 jQuery()
如果调用构造函数jQuery()时传入的参数不同,创建jQuery对象的逻辑也会随机不同。构造函数 jQuery()有 7 种用法。如下图:
jQuery( selector, [,context] )
第一个参数 selector
如果传入一个 **字符串参数**
,jQuery 会检查这个字符串是 选择器表达式
还是HTML代码
。
如果是 选择器表达式
,则会遍历文档,查找与之匹配的 DOM 元素,并创建一个包含了这些 DOM 元素引用的 jQuery 对象;如果没有元素与之匹配,则创建一个空的 jQuery 对象.
当然,这个对象不包含任何元素,它的 length 属性为 0.
字符串参数是 HTML 代码的情况,在下面将会解释.
第二个参数 context
默认情况下,对匹配元素的查找将从 根元素 document对象 开始,即查找范围是整个 文档树,不过也可以传入第二个参数 context
来限定查找范围( 我个人习惯把 context 当做” 上下文
“解读,类似于canvas绘图中的getContext ).
例如,在一个事件监听函数中,可以像下面这样限定查找范围:
|
|
如果 选择器表达式 selector 是简单的 “#id”,且没有指定 上下文 context,则调用浏览器的原生方法 document.getElementById() 查找属性 id 等于 指定值 的元素;如果是比 “#id” 复杂的选择器表达式或指定了上下文,则通过 jQuery 方法.find()查找,因此 $('span',this)等价于 $(this).find('span')
.
jQuery(html,[,ownerDocument])、jQuery(html,props)
第一个参数 HTML代码
如果传入的 字符串参数
像 一段 HTML 代码,(例如,字符串中含有
例如,下面的代码将把 HTML 代码转换成 DOM 元素并插入 body 节点的末尾:
|
|
如果 HTML 代码 是一个单独标签,例如,$(‘‘)或$(‘‘),jQuery 会使用浏览器原生方法 document.creatElement() 创建 DOM 元素。如果是比单独标签更复杂的 HTML 片段,例如上面例子的 $(‘
My new text
‘).appendTo(‘body’);,则利用浏览器的 innerHTML 机制创建 DOM 元素,这个过程有方法 jQuery。buildFragment() 和 方法 jQuery.clean() 实现。第二个参数 ownerDocument 和 props
第二个参数 ownerDocument
用于指定创建新 DOM 元素的文档对象,如果不传入,则默认为 当前文档对象。
如果 HTML 代码是一个单独标签,那么第二个参数还可以是 props
.
props 是一个包含了属性、事件的 普通对象。
在调用 document.creatElement()创建 DOM 元素后,参数 props 会被传给 jQuery 方法 .attr(),然后由 .attr() 负责把参数 props 中的属性、事件设置到新创建的 DOM 元素上。
- 参数 props 的属性可以是任意的 事件类型 (如: “click”),此时 属性值 应该是 事件监听函数,它将被绑定到新创建的 DOM 元素上;
- 参数 props 可以含有以下特殊属性: val、css、html、text、data、width、height、offset,相应的 jQuery 方法: .val() .css() .html() .text() .data() .text() .width() .height() .offset()将被执行,并且属性值会作为参数传入,其他类型的属性则会被设置到新创建的 DOM 元素上;
- 某些特殊属性还会做 跨浏览器兼容 (如 type、value、tabindex等);
- 可以通过属性名 class 设置类样式,但要用 引号 把 class 包裹起来,因为class 是 JavaScript 保留字。例如:
|
|