jQuery的设计思想和简单使用

142 阅读5分钟

现在前端圈子还需要学习jQuery嘛,有很多人说的是不需要学习这个库了。但是从我的角度来看还是值得学习的。

jQuery是目前最长寿也是使用最广泛的javaScript函数库,截至到2020年5月,统计全球排名前100k的网站,有90.29%都在使用jQuery,远远超过了其他的库,数据如下图 关于jQuery的设计思想有一下几点:

1.获取元素

jQuery的基本设计思想和主要用法,就是"选择某个网页元素,然后对其进行某种操作"。

使用jQuery,一般就是将一个选择表达式,放到jQuery()中(一般使用别名$()),然后可以得到选择的元素。

  • 选择表达式为CSS表达式
$(document)   //选择整个文档对象
$('#myId')   //选择ID为myId的网页元素
$('div.myClass')   // 选择class为myClass的div元素
$('input[name=first]')   // 选择name属性等于first的input元素
  • 也能用jQuery独有的表达式
$('a:first')   //选择网页中第一个a元素
$('tr:odd')   //选择表格的奇数行
$('#myForm :input')   // 选择表单中的input元素
$('div:visible')   //选择可见的div元素
$('div:gt(2)')   // 选择所有的div元素,除了前三个
$('div:animated')   // 选择当前处于动画状态的div元素
  • 提供各种强大的过滤器,对结果集进行筛选,缩小选择结果
$('div').has('p');   // 选择包含p元素的div元素
$('div').not('.myClass');   //选择class不等于myClass的div元素
$('div').filter('.myClass');   //选择class等于myClass的div元素
$('div').first();   //选择第1个div元素
$('div').eq(5);   //选择第6个div元素
  • jQuery可以从结果集选择到附近的元素
$('div').next('p');   //选择div元素后面的第一个p元素
$('div').parent();   //选择div元素的父元素
$('div').closest('form');   //选择离div最近的那个form父元素
$('div').children();   //选择div的所有子元素
$('div').siblings();   //选择div的同级元素

2.jQuery的链式操作

jQuery设计思想之一,就是最终选中网页元素以后,可以对它进行一系列操作,并且所有操作可以连接在一起,这就是链式操作。举个例子,如下

$('div').find('h3').eq(2).html('Hello');

咱们分解一下啊

$('div')   //找到div元素
  .find('h3')   //选择其中的h3元素
  .eq(2)   //选择第3个h3元素
  .html('Hello');   //将它的内容改为Hello

这是jQuery最令人称道、最方便的特点。它的原理在于每一步的jQuery操作,返回的都是一个jQuery对象,所以不同操作可以连在一起。

还可以使用end()回到find()操作的那一步,继续另外的操作。

3.如何的创建元素

创建新元素的方法非常简单,只要把新元素直接传入jQuery的构造函数就行了:

$('<p>Hello</p>');

$('<li class="new">new list item</li>');
	
$('ul').append('<li>list item</li>');

4.如何移动元素

jQuery设计思想之一,就是提供两组方法,来操作元素在网页中的位置移动。一组方法是直接移动该元素,另一组方法是移动其他元素,使得目标元素达到我们想要的位置。

假定我们选中了一个div元素,需要把它移动到p元素后面。

  • 第一种方法是使用.insertAfter(),把div元素移动p元素后面:
$('div').insertAfter($('p'));
  • 第二种方法是使用.after(),把p元素加到div元素前面:
$('p').after($('div'));

表面上这两种的效果一样,但是他们有一个重大的差别就是返回的元素不一样,第一种返回的是div元素,第二种返回的是p元素,可以根据需要选择使用哪种。

使用这种模式的操作方法,一共有四对:

 .insertAfter()和.after():在现存元素的外部,从后面插入元素

 .insertBefore()和.before():在现存元素的外部,从前面插入元素

 .appendTo()和.append():在现存元素的内部,从后面插入元素

 .prependTo()和.prepend():在现存元素的内部,从前面插入元素

5.如何修改元素的属性

jQuery 提供多种修改元素的属性的方法:

  • attr()函数获取标签的某个属性 $('#p').attr('class') //获取id为p的标签的属性值
  • attr()修改或修改标签的属性值 $('#p').attr('class','red') //如果存在就是修改,如果不存在就是添加
  • 删除某个属性 $('#p').removeAttr('name')
  • 添加class名称 $('#p').addClass('blue')
  • 删除class名称 $('#p').removeClass('yellow')
  • 有class就删除 没有就添加 $('#p').toggleClass('asdf')
  • val()获取输入框内容 var s = $('input[name="user"]').val()

6.常见的工具方法

$.trim() //去除字符串两端的空格。
$.each() //遍历一个数组或对象。
$.inArray() //返回一个值在数组中的索引位置。如果该值不在数组中,则返回-1。
$.grep() //返回数组中符合某种标准的元素。
$.extend() //将多个对象,合并到第一个对象。
$.makeArray() //将对象转化为数组。
$.type() //判断对象的类别(函数对象、日期对象、数组对象、正则对象等等)。
$.isArray() //判断某个参数是否为数组。
$.isEmptyObject() //判断某个对象是否为空(不含有任何属性)。
$.isFunction() ///判断某个参数是否为函数。
$.isPlainObject() //判断某个参数是否为用"{}"或"new Object"建立的对象。
$.support()  //判断浏览器是否支持某个特性。

7.主要的一些事件操作

.blur() //表单元素失去焦点。
.change() //表单元素的值发生变化
.click() //鼠标单击
.dblclick() //鼠标双击
.focus() //表单元素获得焦点
.focusin() //子元素获得焦点
.focusout() //子元素失去焦点
.hover() //同时为mouseenter和mouseleave事件指定处理函数
.keydown() //按下键盘(长时间按键,只返回一个事件)
.keypress() //按下键盘(长时间按键,将返回多个事件)
.keyup() //松开键盘
.load() //元素加载完毕
.mousedown() //按下鼠标
.mouseenter() //鼠标进入(进入子元素不触发)
.mouseleave() //鼠标离开(离开子元素不触发)
.mousemove() //鼠标在元素内部移动
.mouseout() //鼠标离开(离开子元素也触发)
.mouseover() //鼠标进入(进入子元素也触发)
.mouseup() //松开鼠标
.ready() //DOM加载完成
.resize() //浏览器窗口的大小发生改变
.scroll() //滚动条的位置发生变化
.select() //用户选中文本框中的内容
.submit() //用户递交表单
.toggle() //根据鼠标点击的次数,依次运行多个函数
.unload() //用户离开页面
.unbind()  // 用来解除事件绑定。此行之上事件在jQuery内部,都是.bind()的便捷方式,使用.bind()可以更灵活地控制事件。
.one() //让事件只执行一次

所有的事件处理函数,都可以接受一个事件对象(event object)作为参数

event.pageX //事件发生时,鼠标距离网页左上角的水平距离
event.pageY //事件发生时,鼠标距离网页左上角的垂直距离
event.type //事件的类型(比如click)
event.which //按下了哪一个键
event.data //在事件对象上绑定数据,然后传入事件处理函数
event.target //事件针对的网页元素
event.preventDefault() //阻止事件的默认行为(比如点击链接,会自动打开新页面)
event.stopPropagation() //停止事件向上层元素冒泡

8.常见的一些效果

.fadeIn() //淡入
.fadeOut() //淡出
.fadeTo() //调整透明度
.hide() //隐藏元素
.show() //显示元素
.slideDown() //向下展开
.slideUp() //向上卷起
.slideToggle() //依次展开或卷起某个元素
.toggle() //依次展示或隐藏某个元素

最后我想说的是,虽然jQuery过时了,但是还是值得学习的,jQuery可以教你如何设计API,并且jQuery的api代码风格依然是十分的受欢迎的,比如axios和jQuery.ajax的代码风格就很像。jQuery也能做MVC,就比如Backbone.js 和 Marionette.js。

参考资料:jQuery设计实现 - 阮一峰的网络日志 和 jQuery 中文文档