jQuery 可以说是大部分网站都会使用到的库了 builtwith
今天从简单的地方入手去模拟 jQuery
的实现,但还不是真的实现原理,但是可以帮助我们去理解学习 jQuery
,其实程序员都是害怕麻烦的,有这么多的库就是为了让自己尽可能的少打代码,所以就将完成复杂过程的代码封装起来,在下一次用的时候只需要给出参数就能复用之前的代码使得自己不去干重复而无意义的事情,但是呢作为初学者直接就去使用 jQuery
看上去并无大碍,但一般就不会看到他最本质的东西。所以模拟来实现一个jQuery
需求
1 | window.jQuery = ??? |
分析
$('div')
可以看出我们需要出入一个参数(jQuery 会自动判断为选择器还是节点)- 我们需要在该函数封装两个方法
addClass()
setText()
- 考虑到 div 可能不止一个需要用一个对象来保存多个节点
jQuery
函数
根据传入参数的类型来判断如何初始化节点对象
1 | window.jQuery = function(node){ |
addClass()
函数
使用 classList.add()
1 | nodes.addClass = function(style){ |
setText()
函数
更改 textContext
属性
1 | nodes.setText = function(message){ |
效果
小结
其实 jQuery 也就是一个对象,只是他单独封装他的属性与方法,将 DOM 的方法与属性隐藏得更深了一点,使用起来更方便更强大,兼容性更强。
思考
1
2 > <div id=x></div>
>
1
2
3 > var div = document.getElementById('x')
> var div = ('#x')
>
请说出
div
和$div
的联系和区别。
document.getElementById()
返回的是 DOM
对象,而 $()
返回的是 jQuery
对象div
和 $div
的联系是:
只要 $(div)
就可以把 div
变成$div
两种转换方式将一个jQuery
对象转换成 DOM
对象:[index]和.get(index);
只要 $div[0] 与 $div.get(0) 就能$div 变成 div
div 和 $div 的区别是:
div 的属性和方法有appendChild(),cloneNode(),contains(),hasChildNodes(),insertBefore(),isEqualNode(),isSameNode(),removeChild(),replaceChild(),normalize()
$div 的 属性和方法有 add,addBack,addClass,after,ajaxComplete,ajaxError,ajaxSend,ajaxStart,ajaxStop,ajaxSuccess,andSelf,animate,append,appendTo...