jQuery知识点梳理
简介
// 1 jQuery是一个js库,实际上就是一个js文件,内部有许多其他人给我们写好的功能,我们只需要学习使用方式即可。
// 2 版本简介:
// jQuery分为3大版本
// 1.x 版本 兼容现代浏览器
// 2.x 版本(不支持ie678)
// 3.x 版本(不支持ie678)
// 3 压缩与未压缩版本的区别:
// 压缩版本适用于上线使用(生产环境),好处是体积小
// 未压缩版本使用于开发与学习,好处是有注释
入口函数
1 2 3 4 5 6
| $(document).ready(function () { console.log('这是jq的入口函数1'); }); $(function () { console.log('这是jq的入口函数2'); });
|
1 2 3
| window.onload = function () { console.log('这是js的入口函数'); };
|
js 与 jquery 入口函数区别
1 2 3 4 5 6 7 8 9
| js的入口函数: 在页面加载完成后(结构,图片,文件)执行内部代码。
jQuery的入口函数: 执行时机: 在页面的结构加载完毕后执行内部代码。 如果希望使用jQuery时也可以在页面加载完成后执行,可以使用jQuery的方式给window对象设置一个load事件(后面的事件操作部分说明)。
|
jQuery顶级对象
1
| jQuery中的顶级对象有两个,一个叫$,另一个叫jQuery// console.log($ === jQuery); // true
|
$
$这个函数根据传入的参数形式不同,会具有不同的功能:
1 选择器功能: $(‘div’);
2 入口函数功能: $(function () {});
3 给DOM对象设置新的功能:$(document).ready(function () {})
选择器
1 标签选择器
$(‘div’).text(‘这是内容’);
2 id选择器
$(‘#box’).text(‘这是box’);
3 类选择器
$(‘.box’).text(‘这是类名为box的元素’);
4 子代选择器
$(‘#list>li’).css(‘backgroundColor’, ‘red’);
5 后代选择器
$(‘#list li’).css(‘backgroundColor’, ‘red’);
交集选择器
获取页面中的类名为box的div
$(‘div.box’).text(‘这是类名为box的div’);
并集选择器
$(‘div,p’).text(‘这是div和p标签’);
过滤选择器
:eq(index) $(‘li:eq(2)’).CSS(‘color’,’red’)
:odd $(‘li:odd’) 奇数行
:even $(‘li:even’) 偶数行
:selected 选中的
:checkbox 选中所有的复选框
:checkbox :checked 选中所有被选中的复选框
筛选选着器
1 children() 子代选择器
children() 不书写选择器参数表示获取所有子元素,如果书写了选择器参数表示选择指定的部分内容
我们发现,这个选择器与 $(‘#list>li’) 的功能是相似的,好处是可以完善链式编程操作。
2 find() 后代选择器
注意:find()如果不设置选择器参数,不会生效
1
| $('#list').find('li').css('backgroundColor', 'red');
|
3 parent() 父元素获取,相当于parentNod
由于jQuery对象中可能具有多个DOM对象,所以parent()获取的结果可能为多个元素
1
| $('p').parent().css('width', '100px');
|
4 parents() 祖先元素
parents方法可以不书写参数直接使用,但是没有意义,所以还是推荐设置参数后使用
5 siblings() 同级元素(兄弟元素)
1
| $('#item').siblings('.item').text('这是同级元素');
|
6 next() 下一个 prev() 上一个
1 2
| $('#item').next('.item2').text('这是下一个同级元素'); $('#item').prev('.item').text('这是上一个同级元素');
|
7 nextAll()
前面所有同级元素
nextAll
1
| $('#item').nextAll('.item').text('这是后面的所有同级元素');
|
8 eq() 根据指定下标获取元素
1 2 3 4
| // var index = 1; // 例如index变量中保存了需要操作的元素下标值 // $('#list2>li:eq(' + index + ')') // eq()是推荐的形式,好处可以不进行字符串拼接。 $('#list2>li').eq(index).css('backgroundColor', 'red');
|
DOM对象与jQuery对象
1获取方式
DOM对象:通过DOM的方式获取的标签。
jQuery对象:通过jQuery的方式获取的标签。
2 DOM对象与jQuery对象之间的关系
我们会称jQuery对象是DOM对象的包装集(jQuery对象是一个伪数组,内部包裹了一个或多个DOM对象)
1 2 3
| /*var box = document.getElementById('box'); console.dir(box); console.log($('div'));*/
|
3 DOM对象与jQuery对象使用时的注意点:
DOM对象只能使用DOM的功能,不能使用jQuery的功能
// jQuery对象只能使用jQuery的功能,不能使用DOM的功能
4 DOM对象与jQuery对象的转换方式
将DOM对象转换为jQuery对象:通过$()包裹即可
/var box = document.getElementById(‘box’);
$(box).text(‘这是新的内容’);/
将jQuery对象转换为DOM对象:
$(‘#box’)[0].innerHTML = ‘这是box的内容’; // 推荐方式
$(‘#box’).get(0).innerHTML = ‘这是更新的内容’;
获取元素
获取多个标签中下标为奇数的元素
$(‘li:odd’).text(‘这是下标为奇数的元素’);
获取多个标签中下标为偶数的元素
$(‘li:even’).text(‘这是下标为偶数的元素’);
获取下标为多少的元素
$(‘li:eq(2)’).text(‘这是第三个li’);
jQuery的两大特性
1 链式编程
1 2 3 4 5 6
| 含义:任意的设置型操作后可以继续操作当前对象。 // $('#box').text('这是box的内容').css('backgroundColor', 'red');
// 下面是一个内容获取操作,获取操作后是对返回的结果操作了,而不是box // $('#box').text(). // console.log($('#box').text());
|
2 隐式迭代: 偷偷的遍历
1 2 3 4 5
|
console.log($('div').css('width'));
|
设置样式操作.css()
设置样式操作:
1 2 3 4
| $('#box').css('backgroundColor', 'red'); $('#box').css('background-color', 'red'); $('#box').css('width', '100px'); $('#box').css('height', 100);
|
多个样式的同时设置方式:
1 2 3 4 5
| $('#box').css({ width : 100, height : 100, backgroundColor : 'red' });
|
样式获取操作
1 2 3
| 注意的点:只能进行单个元素的单个样式获取 console.log($('#box').css('width'));
|
类名操作
1 类名添加 addClass()
1
| $('#box').addClass('colorBlue fl');
|
2 移除类名 removeClass()
1 2 3
| 移除类名时可以移除一个或多个,并且不需要考虑移除时的书写顺序 $('#box').removeClass('colorBlue'); $('#box').removeClass('fl colorBlue');
|
3 切换类名 toggleClass()
1 2
| 如果某个类名已经存在,会被移除,如果某个类名不存在,会被添加 $('#box').toggleClass('box2 colorBlue');
|
4 检测类名是否存在 hasClass()
1 2 3 4 5 6 7
| console.log($('#box').hasClass('colorBlue')); console.log($('#box').hasClass('box6'));
|
动画
show与hide
show与hide不设置参数时,是普通的显示与隐藏效果,不具有动画
1 2 3 4 5 6 7
| $('#btn1').click(function () { $('#box').show(1000, function () { console.log('运动完毕了'); }); });
|
参数1 运动时间,毫秒单位
参数2 函数,表示运动完毕后执行的操作
slideDown()划入
1 2 3 4 5 6 7 8
| $('#btn1').click(function () { $('#box').slideDown(1000, function () { console.log('运动完毕了'); }); });
|
slideUp()划出
1 2 3 4 5 6 7 8
| $('#btn2').click(function () { $('#box').slideUp(1000, function () { console.log('运动完毕了'); }); });
|
slideToggle()切换
1 2 3 4 5 6 7 8 9
| $('#btn3').click(function () { $('#box').slideToggle(1000, function () { console.log('运动完毕了'); }); });
|
fadeIn() 渐入
1 2 3 4 5 6 7 8
| $('#btn1').click(function () { $('#box').fadeIn(1000, function () { console.log('我渐入了'); }); });
|
fadeOut() 渐出
1 2 3 4 5 6 7 8
| $('#btn2').click(function () { $('#box').fadeOut(1000, function () { console.log('我渐出了'); }); });
|
fadeToggle() 切换
1 2 3 4 5 6 7 8
| $('#btn3').click(function () { $('#box').fadeToggle(1000, function () { console.log('我切换了'); }); });
|
fadeTo() 渐到
1 2 3 4 5 6 7 8 9
| $('#btn4').click(function () { $('#box').fadeTo(1000, 0.3, function () { console.log('我渐到了'); }); });
|
animate() 自定义动画
1 2 3 4
| 参数1:运动要修改的样式 参数2:运动时间 参数3:运动模式 默认,变速'swing' 匀速'linear' 参数4:运动完毕后执行的操作,函数
|
stop()结束排队,加到动画前
节点创建操作
1 使用$()内部书写结构的方式可以进行标签创建,但是创建的元素不在页面中显示,需要进行添加操作
1
| $('<div>这是div<p>这是p标签</p></div>')
|
html()
html() 相当于innerHTML
1
| $('#box').html('这是box的内容<div>这是div<p>这是p标签</p></div>')
|
append()
向某个元素的子节点最后添加元素也可移动元素
1 2 3 4 5
| // var $div = $('<div>这是创建的div</div>'); // $('#box').append($div); // append方法可以直接传入字符串形式的标签结构,可以直接生成 // $('#box').append('<div>这是div</div><div>这是div</div>');
|
prepend()
想某个元素的子节点最前面添加元素
1 2
| $('#box').prepend('<div>这是div</div>'); $('#box').prepend($('.text'));
|
after()
用于将某个元素添加到指定元素同级的后面
1 2
| // $('.item').after($('.text')); // $('.item').after('<div>这是创建的div</div>');
|
before()
用于将某个元素添加到指定元素同级的前面
appendTo() - 与append()对应
1 2 3
| // appendTo方法的参数可以直接书写选择器 // $('.text').css('width', 100).appendTo('#box'); $('#box').append($('.text'));
|
prependTo() - 与prepend()对应
insertAfter() - 与after()对应
insertBefore() - 将某个元素添加到指定元素的同级的前面
清楚元素内部内容
1html()
2 empty() 用于清除元素的内部内容
3 remove() 用于移除元素以及内容内容
克隆clone()
用于对元素进行克隆操作
参数默认值为false,表示复制标签以及内部内容
参数设置为true表示不仅复制结构,还会复制事件
1 2 3 4 5 6 7 8 9 10 11
|
$('.box').click(function () { console.log('这是box'); }); $('body').append($('.box').clone(true));
|
属性操作方法
prop()
用于操作标签行内的自带属性
1 2 3 4 5 6 7 8 9 10
| // 1 获取操作 // console.log($('#box').prop('id')); // 2 设置操作 // $('#box').prop('class', 'box6'); /*$('#box').prop({ class : 'box6', title : '这是新的title' });*/ // prop无法操作标签的自定义属性 // console.log($('#box').prop('data-hehe'));
|
attr()
用于操作标签的行内自定义属性
1 2 3 4 5
| /*console.log($('#box').attr('data-hehe')); $('#box').attr('data-hehe', '新内容');*/
/*console.log($('#text').attr('disabled')); console.log($('#text').prop('disabled'));
|
data()
用于操作标签的行内自定义属性
1 2 3 4
| console.log($('#box').data('hehe')); $('#box').data('title', '这是title'); console.log($('#box').data('title'));
|
样式操作
获取操作:
1 width() 用于获取元素的width属性值
1
| console.log($('#box').width());
|
2 innerWidth() 用于获取元素的width+padding
1
| console.log($('#box').innerWidth());
|
3 outerWidth() 用于获取元素的width+padding+border
1
| console.log($('#box').outerWidth());
|
4 outerWidth(true) 用于获取盒模型的整体宽度
1
| console.log($('#box').outerWidth(true));
|
设置操作:
1 width() 用于设置元素的width属性值
2 innerWidth() 用于设置元素的width+padding,注意,设置值时只会修改width属性
1
| $('#box').innerWidth(150);
|
3 outerWidth() 用于设置元素的width+padding+border,注意,设置值时只会修改width属性
1
| $('#box').outerWidth(150);
|
4 outerWidth(数, true) 用于设置盒模型的整体宽度,注意,设置值时只会修改width属性
使用时:先传数,再传true,忘了就试一试
1
| $('#box').outerWidth(150, true);
|
页面滚动事件
scroll
滚动事件:某个元素的内部滚动条滚动时触发事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| $(function () {
$(window).scroll(function () { console.log($(window).scrollTop(), $(window).scrollLeft()); });
})
|
事件发展历程
1 简单事件设置方式
1 2 3 4 5 6 7
| /*$('#btn').click(function () { console.log('这是点击事件1'); }); // .... $('#btn').mouseover(function () { console.log('这是点击事件2'); });*/
|
2 bind() 用于设置事件
1 2 3 4 5 6 7 8 9 10 11 12
| /*$('#btn').bind('click mouseover', function () { console.log('这是点击事件与移入事件'); });*/
/*$('#btn').bind({ click : function () { console.log('这是点击事件'); }, mouseover : function () { console.log('这是移入事件'); } });*/
|
3 delegate() 用于设置事件委托3
1 2 3
| /*$('#box').delegate('p', 'click', function () { console.log('这是使用delegate设置的事件'); });*/
|
4 on() jQuery使用on的方式统一了所有的事件设置方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| 4.1 进行简单事件设置 /*$('#btn').on('click', function () { console.log('这是普通事件设置'); });*/ 4.2 模拟bind方法 /*$('#btn').on('click mouseover', function () { console.log('这是事件'); });*/ /*$('#btn').on({ click : function () { console.log('这是点击事件'); }, mouseover : function () { console.log('这是移入事件'); } });*/ 4.3 用于设置事件委托 // $('#box').on('click', 'p,span,.box,#box', function () { // console.log('这是事件委托'); // });
|
移除事件off()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
var fun = function () { console.log('这是点击事件'); }; $('#box').click(fun); $('#box').on('mouseover', function () { console.log('这是移入事件'); }); $('#box').on('click', 'p', function () { console.log('这是事件委托'); });
|
取消默认事件效果,阻止传播
1 阻止事件传播: (阻止冒泡)
e.stopPropagation();
2 取消标签默认事件效果: (例如阻止跳转)
e.preventDefault();
由于return false具有两种功能,如果在需求中只需要一种,就可以使用上面的两个方法
return false;
链式编程原理
小结:实际上链式编程的基本原理就是在设置型操作后设置了return this