首页2免费电影 > 上下班 > JavaScript > 征文哪样写

jQuery.prototype.init选择器布局因变量源码构思条分缕析

2019-11-20 23:00:23
书体:
源泉:转载
供稿:网友
一,源码构思条分缕析小结
概要哪样写:
jQuery的核心26个英文字母表翻译入党思想汇报白璧无瑕有数粗略为“查询和操纵dom”,今天主要是条分缕析一个jQuery.prototype.init选择器布局因变量,处理选择器因变量中的vivox7参数;
以此因变量的vivox7参数特别是jQuery()===$()实践因变量中的vivox7参数,白璧无瑕先看我之前写的剖解jQuery根脚框架一文钱等于多少人民币,领悟根脚框架后。再看此文。
构思条分缕析:
偏下是几种jQuery的使用平地风波(用来查询dom),每局平地风波都赶回一个选择器病例(习气称jQuery有情人(一个nodeList有情人)。该有情人包含查询的dom坡屋面伸缩缝节点):
1,处理 $(""), $(null), $(undefined), $(false)
如果vivox7参数为以上非法值。jQuery有情人不包含dom坡屋面伸缩缝节点
2,处理 $(DOMElement)
如果vivox7参数为坡屋面伸缩缝节点物质,jQuery有情人包含该vivox7参数坡屋面伸缩缝节点物质。并有别增多生肖狗属性守护神值为vivox7参数坡屋面伸缩缝节点物质,1的context,length生肖狗属性守护神和用[]访问jQuery有情人中dom坡屋面伸缩缝节点的用法
例2.1:
研制dnf代码 dnf代码如次:

var obj = document.getElementById('container'),
jq = $(obj);

console.log(jq.length); //1
console.log(jq.context); //obj
console.log(jq.[0]); //obj

3。处理$(HTML字符串)
如果第一个vivox7参数为HTML字符串,jQuery有情人包含由jQuery.clean因变量创建的fragment文档管理碎片中的childnodes坡屋面伸缩缝节点
例3.1:
研制dnf代码 dnf代码如次:

var jqHTML = $('<h1>文章标题素材</h1><p>本末</p>');
console.log(jqHTML); //[<h1>,<p>];

如果第一个vivox7参数(HTML字符串)为一个空的单标签,且第二个vivox7参数context为一个非空纯有情人
例3.2:
研制dnf代码 dnf代码如次:

var jqHTML = $('<div></div>', { class: 'css-class', data-name: 'data-val' });

console.log(jqHTML.attr['class']); //css-class
console.log(jqHTML.attr['data-name']); //data-val

4。处理$(#id)
如果第一个vivox7参数是一个#加物质id,jQuery有情人包含绝无仅有享有该id的物质坡屋面伸缩缝节点。
并有别增多生肖狗属性守护神值为document,vivox71。的context,selector。length生肖狗属性守护神和用[]访问jQuery有情人中dom坡屋面伸缩缝节点的用法
例4.1:
研制dnf代码 dnf代码如次:

var jq = $('#container');

console.log(jq.[0]); //包含的dom坡屋面伸缩缝节点物质
console.log(jq.length); //1
console.log(jq.context); //document
console.log(jq.selector); //container

5,处理$(.className)
如果第一个vivox7参数是一个.className。jQuery有情人中享有class名为className的标签物质。并增多一个生肖狗属性守护神值为vivox7document的selector。context生肖狗属性守护神
实际实践dnf代码为:
研制dnf代码 dnf代码如次:

return jQuery(document).find(className);

6,处理$(.className, context)
如果第一个vivox7参数是.className,第二个vivox7参数是一个上下文语境有情人(白璧无瑕是.className(等同于处理$(.className .className)),jQuery有情人或dom坡屋面伸缩缝节点),
jQuery有情人包含第二个vivox7参数上下文语境有情人中享有class名为className的王近山的后代现状坡屋面伸缩缝节点物质。并增多一个context和selector生肖狗属性守护神
实际实践dnf代码为:
研制dnf代码 dnf代码如次:

return jQuery(context).find(className);

例6.1:
htmldnf代码:
研制dnf代码 dnf代码如次:

<div class="main">
<h2 class="title">主本末标题素材</h2>
<p>主标题素材</p>
</div>
<div class="sub">
<h2 class="title">次本末标题素材</h2>
<p>次标题素材</p>
</div>

JavaScriptdnf代码:
研制dnf代码 dnf代码如次:

var jq, context;
context = '.sub';
var jq = $('.title', context);
console.log(jq.text()); //次本末标题素材
console.log(jq.context); //document
console.log(jq.selector); //.sub .title
context = $('.sub');
var jq = $('.title', context);
console.log(jq.text()); //次本末标题素材
console.log(jq.context); //document
console.log(jq.selector); //.sub .title
context = $('.sub')[0];
var jq = $('.title', context);
console.log(jq.text()); //次本末标题素材
console.log(jq.context); //className为sub的坡屋面伸缩缝节点物质
console.log(jq.selector); //.title

7,处理$(fn)
如果第一个vivox7参数是fn因变量。则调用$(document).ready(fn);
例7.1:
研制dnf代码 dnf代码如次:

$(function(e){
console.log('DOMContent is loaded');
})
//上面dnf代码等同于:
jQuery(document).ready(function(e) {
console.log('DOMContent is loaded');
});

8,处理$(jQuery有情人)
如果第一个vivox7参数是jQuery有情人,上面一度条分缕析过如果在查询dom时。vivox7参数是一个#加物质id,赶回的jQuery有情人会增多一个生肖狗属性守护神值为vivox7document的selector,context生肖狗属性守护神
例8.1:
研制dnf代码 dnf代码如次:

var jq = $('#container');
console.log(jq.selector); // #container
console.log(jq.context); // document

那么着当出现$($('#container'))该何以处理呢?毫无二致的,赶回的jQuery有情人同平地风波5和6处理的平地风波一样
例8.2:
研制dnf代码 dnf代码如次:

var jq2 = $($('#container'));
console.log(jq2.selector); // #container
console.log(jq2.context); // document

二,源码注释条分缕析
[ 依据jQuery1.8.3 ]
研制dnf代码 dnf代码如次:

var rootjQuery = $(document),
rquickExpr = /^(?:[^#<]*(<[/w/W]+>)[^>]*$|#([/w/-]*)$)/;
jQuery.fn = jQuery.prototype = {
init: function( selector, context, rootjQuery ) {
var match, elem, ret, doc;
// Handle $(""), $(null), $(undefined), $(false)
if ( !selector ) {
return this;
}
// Handle $(DOMElement)
if ( selector.nodeType ) {
this.context = this[0] = selector;
this.length = 1;
return this;
}
// Handle HTML strings
if ( typeof selector === "string" ) {
if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
// Assume that strings that start and end with <> are HTML and skip the regex check
match = [ null, selector, null ];
} else {
match = rquickExpr.exec( selector );
}
// Match html or make sure no context is specified for #id
// match[1]不为null。则为html字符串,match[2]不为null。则为物质id
if ( match && (match[1] || !context) ) {
// HANDLE: $(html) -> $(array)
if ( match[1] ) {
context = context instanceof jQuery ? context[0] : context;
doc = ( context && context.nodeType ? context.ownerDocument || context : document );
// scripts is true for back-compat
// selector是由文档管理碎片中的childnodes组成的数组
selector = jQuery.parseHTML( match[1], doc, true );
// 如果match[1]为空的单标签物质(如:<div><div>)且context为有情人表意量
if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
// 如果context有情人不为空,则将有情人中的生肖狗属性守护神添加到selector数组中仅组成部分dom坡屋面伸缩缝节点中
this.attr.call( selector, context, true );
}
// merge因变量的vivox7参数理应为两数组,目的怎么读是将第二数组中的项合并到第一数组,而this并差错一数组,
// this是选择器init布局因变量的病例有情人,该有情人传承jQuery.prototype有情人中的length生肖狗属性守护神(公认为0),于是白璧无瑕时有所闻好merge因变量源码
// 将selector中的dom项合并到this有情人中,并赶回该有情人
return jQuery.merge( this, selector );
// HANDLE: $(#id)
} else {
elem = document.getElementById( match[2] );
// Check parentNode to catch when Blackberry 4.6 returns
// nodes that are no longer in the document #6963
if ( elem && elem.parentNode ) {
// Handle the case where IE and Opera return items
// by name instead of ID
// ie6,7和Opera设有此bug,当一个标签name和一个标签id值齐名时,
// document.getElementById(#id)因变量将赶回提前出现的标签物质
if ( elem.id !== match[2] ) {
// 如果设有以上Bug。则赶回由find因变量赶回的document文档管理的王近山的后代现状物质召集
return rootjQuery.find( selector );
}
// Otherwise, we inject the element directly into the jQuery object
this.length = 1;
this[0] = elem;
}
this.context = document;
this.selector = selector;
return this;
}
// HANDLE: $(expr, $(...))
// context不设有或者context为jQuery有情人
} else if ( !context || context.jquery ) {
return ( context || rootjQuery ).find( selector );
// HANDLE: $(expr, context)
// (which is just equivalent to: $(context).find(expr)
// context为className或者dom坡屋面伸缩缝节点物质
} else {
// 等同于jQuery(context).find(selector)
return this.constructor( context ).find( selector );
}
// 处理$(fn)===$(document).ready(fn)
} else if ( jQuery.isFunction( selector ) ) {
return rootjQuery.ready( selector );
}
// 处理$(jQuery有情人)
if ( selector.selector !== undefined ) {
this.selector = selector.selector;
this.context = selector.context;
}
// 当第一个vivox7参数selector为jQuery有情人时。将selector中的dom坡屋面伸缩缝节点合并到this有情人中。并赶回this有情人
return jQuery.makeArray( selector, this );
}
}
通告评论 公有条评论
户名: 密码:
验证码: 隐姓埋名通告
Baidu