问题:
- jQuery对象和DOM对象的区别?
- jQuery对象如何转成DOM对象? DOM对象如何转为jQuery对象?
- jQuery选择器接口的使用?
$(d),d可以是:对象,function,字符串(id,HTML元素标签等),空(创建jQuery对象);


带着以上问题去学习jQuery源码。
console.log($('#box')); // 查询console.log($('<a>')); // 创建
// jQuery原型上扩展属性jQuery.fn = jQuery.prototype = {jQuery: version,length: 0,selector: '',init: function(selector, context) {context = context || document;var index = 0, elem, match;if(typeof selector === 'string') { //创建DOM节点,或者查询DOM节点if(selector.charAt(0) === '<' && selector.charAt(selector.length-1) === '>' && selector.length >=3) {match = [selector];}if(match) { //创建DOM节点jQuery.merge(this, jQuery.parseHTML(selector, context));}else { // 查询DOM节点elem = document.querySelectorAll(selector);var elems = Array.prototype.slice.call(elem);this.length = elems.length;for(; index < elems.length; index++) {this[index] = elems[index];}this.context = context;this.selector = selector;}}else if(selector.nodeType) { // selector为对象,DOM节点,将DOM对象转为jQuery对象,设置length,数组[0],context属性this.length = 1;this.context = this[0] = selector;return this;}else if (toString.call(selector) === '[object Function]') {// 将传入的function加入到funtionList,待页面加载完毕,执行funtionList里function}},css: function() {console.log('style...');}};jQuery.extend({isPlainObject: function(obj) {return toString.call(obj) === "[object Object]";},isArray: function(obj) {return toString.call(obj) === "[object Array]";},// 合并数组merge: function(first, second) {var l = second.length;var i = first.length;var j = 0;if(typeof l === 'number') {for(; j<l; ) {first[i++] = second[j++];}}else {while(second[j] !== undefined) {first[i++] = second[j++];}}first.length = i;return first;},// 创建DOM元素,以数组形式返回parseHTML: function(data, context) {if(!data || typeof data !== 'string') {return null;}// 过滤标签var parse = rejectExp.exec(data);//console.log(parse);return [context.createElement(parse[1])];}});
