转自 https://www.cnblogs.com/liwenzhou/p/8178806.html
为什么要用jQuery
做同样的事,jQuery写起来极其简练
jQuery相当于JavaScript的第三方模块(原生的DOM是基础)
jQuery的语法设计使得许多操作变得容易,如操作文档对象(document)、选择文档对象模型(DOM)元素、创建动画效果、处理事件、以及开发Ajax程序
学习内容
0,查找标签/属性
1,改变标签
2,改变标签中的属性
3,改变标签的样式
4,事件相关
5,动画效果
6,其他方法
导入jQuery
<script src="jquery-3.2.1.min.js"></script>
推荐在body的最下面导入
jQuery对象和DOM对象
jQuery对象就是通过jQuery包装DOM对象后产生的对象。
jQuery对象是 jQuery独有的。
如果一个对象是 jQuery对象,那么它就可以使用jQuery里的方法:例如$(“#i1”).html()。
约定
我们在声明一个jQuery对象变量的时候在变量名前面加上$:
var $variable = jQuery对像 var variable = DOM对象 $variable[0] //jQuery对象转成DOM对象
例子
$("#i1").html(); //jQuery对象可以使用jQuery的方法 $("#i1")[0].innerHTML; // DOM对象使用DOM的方法
互转
jQuery对象 --> DOM对象 jQuery对象[0] 用索引取出具体的标签,则变成DOM对象
DOM对象 --> jQuery对象 $(DOM对象) 用$包住DOM对象,则变成jQuery对象
查找
可以查找到的
标签
标签的属性
表单对象属性
基本选择器
标签选择器 $("tagName") id选择器 $("#id") class选择器 $(".className") 配合使用 $("div.c1") // 找到有c1(class类)的div标签 通用选择器 $("*") 组合选择器 $("#id, .className, tagName") // 符合其一,即可找出来
层级选择器
x和y可以为任意选择器
$("x y"); // x的所有后代y(子子孙孙) $("x > y"); // x的所有儿子y(儿子) $("x + y"); // 找到所有紧挨在x后面的y $("x ~ y"); // x之后所有的兄弟y
属性选择器
[attribute] [attribute=value] // 属性等于 [attribute!=value] // 属性不等于
例子
<input type="text"> <input type="password"> <input type="checkbox"> $("input[type='checkbox']"); // 取到checkbox类型的input标签 $("input[type!='text']"); // 取到类型不是text的input标签
基本筛选器
:first // 第一个 :last // 最后一个 :eq(index) // 索引等于index的那个元素 :even // 匹配所有索引值为偶数的元素,从 0 开始计数 :odd // 匹配所有索引值为奇数的元素,从 0 开始计数 :gt(index) // 匹配所有大于给定索引值的元素 :lt(index) // 匹配所有小于给定索引值的元素 :not(元素选择器) // 移除所有满足not条件的标签 :has(元素选择器) // 选取所有包含(一个或多个)标签在其内的标签(指的是从后代元素找)
例子
$("div:first") // 找到所有的div,只留下第一个 $("div:has(h1)") // 找到所有后代中有h1标签的div标签 $("div:has(.c1)") // 找到所有后代中有c1样式类的div标签 $("li:not(.c1)") // 找到所有不包含c1样式类的li标签 $("li:not(:has(a))")// 找到所有后代中不含a标签的li标签
表单筛选器
表单属性
其实也可以通过属性选择器找到,但是通过表单筛选器更高效
:text 普通输入框
:password 密码输入框
:file 文件输入框
:radio 单选框
:checkbox 多选框
:submit 提交按钮
:reset 刷新按钮
:button 普通按钮
例子
$(":checkbox") // 找到所有的checkbox $("#id3 input:checkbox") // 找到【id3的内部】的所有checkbox
表单对象属性
:enabled 可用
:disabled 不可用
:checked 被选中的checkbox
:selected 被选中的下拉菜单
例子
$("input:enabled") // 找到可用的input标签 $(":selected") // 找到所有被选中的option
jQuery对象的筛选方法
可以通过这些方法达到筛选的效果
.next() // 下一个 .nextAll() // 下一个所有 .nextUntil("#i2") // 下面,直到往后找到#i2为止 (不包含#i2) .prev() // 前一个 .prevAll() // 前一个所有 .prevUntil("#i2") // 前面,直到往后找到#i2为止 (不包含#i2) .parent() // 父标签 .parents() // 查找当前元素的所有的父辈元素 .parentsUntil() // 查找当前元素的所有的父辈元素,直到遇到匹配的那个元素为止。 .children(); // 儿子们 .siblings(); // 兄弟们 .find("p"); // 从【结果集】中搜索所有与指定表达式匹配的元素。 .filter(".c1") // 从【结果集】中过滤出有c1样式类的 .first() // 获取【结果集】的第一个元素 .last() // 获取【结果集】的最后一个元素 .not() // 从【结果集】中删除与指定表达式匹配的元素 .has() // 从【结果集】中保留包含特定后代的元素,去掉那些不含有指定后代的元素。 .eq() // 索引值等于指定值的元素
例子
$("#id1").next() // 找到id为id1的下一个元素
操作
文档操作
$(A).append(B) // 把B追加到A内部的最后 $(A).appendTo(B) // 把A追加到B内部的最后 $(A).prepend(B) // 把B前置到A内部的最前 $(A).prependTo(B) // 把A前置到B内部的最前 $(A).after(B) // 把B放到A的后面 $(A).insertAfter(B) // 把A放到B的后面 $(A).before(B) // 把B放到A的前面 $(A).insertBefore(B) // 把A放到B的前面 .remove() // 删除整个标签 .empty() // 清空标签的内部 $(A).replaceWith(B) // B替换所有A $(A).replaceAll(B) // A替换所有B .clone() // 克隆
append/prepend/after/before的B可以直接写文本, 例如:$("#id1").append("<p>段落1</p>") // 在id为id1的内部添加文本
示例
$("#id2").append(divEle) // 在id为id2的内部的最后添加divEle $(pEle).appendTo($("#id2")) // 把pEle添加到#id2的内部的最后 $("#id1").clone().insertAfter($("#id1")) // 克隆一个id为id1的标签并把它插入到它本身的后面 $("div").replaceWith("<div>new world</div>") // <div>new world</div>替换掉div $("#id1").append("<p>段落1</p>") // 在id为id1的内部添加文本 $("div").append("hello") // 在所有div的内部添加hello文本
样式操作
class操作
.addClass(); // 添加指定的CSS类名。 .removeClass(); // 移除指定的CSS类名。 .hasClass(); // 判断样式存不存在 .toggleClass(); // 切换CSS类名,如果有就移除,如果没有就添加。
示例
$("#id1").addClass("c2") // 找到id为id1的元素,添加样式c2
.css操作
.css("color","red") // 【修改】单个样式属性 .css({"color":"red","font-size":"24px"}) // 【修改】多个样式属性
示例
$("p").css("color", "red"); //将所有p标签的字体设置为红色
属性操作
自定义属性
用于id等或自定义属性
.attr(attrName) // 【查找】返回第一个匹配元素的属性值 .attr(attrName, attrValue) // 【设置】为所有匹配元素设置一个属性值 .attr({k1: v1, k2:v2}) // 为所有匹配元素设置多个属性值 .removeAttr() // 【删除】从每一个匹配的元素中删除一个属性
例子
$("#id3").attr("class") // 返回id为id3的class的属性值
判断属性值
用于checkbox和radio
.prop() // 获取属性 --> 返回布尔值
.removeProp() // 移除属性
prop和attr的区别
attr所指的属性是HTML标签属性,而prop所指的是DOM对象属性;
可以认为attr是显式的,而prop是隐式的
例子
<input type="checkbox" id="i1" value="1"> // 针对上面的代码, $("#i1").attr("checked") // undefined $("#i1").prop("checked") // false
位置操作
.offset() // 获取匹配元素在当前窗口的相对偏移或设置元素位置 .position() // 获取匹配元素相对父元素的偏移 .scrollTop() // 获取匹配元素相对滚动条顶部的偏移 .scrollLeft() // 获取匹配元素相对滚动条左侧的偏移
.offset()方法允许我们检索一个元素相对于文档(document)的当前位置。
和 .position()的差别在于: .position()是相对于相对于父级元素的位移。
示例
$("div").offset() // 获取第一个div的相对偏移 $("#id1").offset({top: 20, left: 20}) // 【建议】通过找id再设置相对偏移 $("div").offset({top: 20, left: 20}) // 这样会设置【所有】找到的div的相对偏移
尺寸操作
.height() 内容 高 .width() 内容 宽 .innerHeight() 内容 高 + padding .innerWidth() 内容 宽 + padding .outerHeight() 内容 高 + padding + border .outerWidth() 内容 宽 + padding + border
示例
$("div").height() //【获取】第一个div的高 $("#id1").height(50) // 【设置】id为id1的高
文本操作
.html() // 【获取】第一个匹配元素的html内容 .html(val) // 【设置】所有匹配元素的html内容 --> 要设置的内容写在()内 .text() // 【查找】取得所有匹配元素的内容 .text(val) // 【设置】设置所有匹配元素的内容 --> 要设置的内容写在()内 .val() // 【查找】取得第一个匹配元素的当前值 .val(val) // 【设置】设置所有匹配元素的值 .val([val1, val2]) // 设置【多选】的checkbox 或者【多选】select的值
例子
$("[name='hobby']").val(['basketball', 'football']); $("#s1").val(["1", "2"]) $("input[name='gender']:checked").val() // 获取被选中的checkbox或radio的值
事件
常用事件
click(function(){...})
hover(function(){...})
blur(function(){...})
focus(function(){...})
change(function(){...})
keyup(function(){...})
绑定事件
jQuery对象.on( 事件 [selector ],function(){})
events: 事件
selector: 选择器(可选的)
function: 事件处理函数
阻止后续事件执行
return false;
事件委托
适用于给未来的元素绑定事件(页面生成的时候还没有的标签);
事件委托是通过事件冒泡的原理,利用父标签去捕获子标签的事件.
$("table").on("click", ".delete", function () { // 删除按钮绑定的事件(包括未来的删除按钮) })
页面载入
等待DOM数加载完成
两种写法
$(document).ready(function(){ // 在这里写你的JS代码... })
简写
$(function(){ // 你在这里写你的代码 })
动画效果
// 基本 .show([s,[e],[fn]]) .hide([s,[e],[fn]]) .toggle([s],[e],[fn]) // 滑动 .slideDown([s],[e],[fn]) .slideUp([s,[e],[fn]]) .slideToggle([s],[e],[fn]) // 淡入淡出 .fadeIn([s],[e],[fn]) .fadeOut([s],[e],[fn]) .fadeTo([[s],o,[e],[fn]]) .fadeToggle([s,[e],[fn]]) // 自定义(了解即可) .animate(p,[s],[e],[fn])
补充
each方法
相比for循环更简单
第一种方式
$divEle.each(function(){})
第二种方式
$.each(DOM对象,function(){})
例子
li =[10,20,30,40] $.each(li,function(i, v){ console.log(i, v); //index是索引,ele是每次循环的具体元素。 })
后续的each循环不进行
return false;
退出当前这一次循环
return;
data方法
.data(key, value) // 给【结果集】中的所有标签存储相关的数据(或jQuery对象) .data(key) // 返回【结果集】中第一个标签的key .removeData(key) // 移除存放在元素上的数据,不加key参数表示移除所有保存的数据
例子
$("div").data("k",100); // 给所有div标签都保存一个名为k,值为100 $("div").data("k"); // 返回第一个div标签中保存的"k"的值 $("div").removeData("k"); // 移除元素上存放k对应的数据
插件(了解即可)
给【jQuery对象】扩展一个自定义方法
$.fn.extend({"方法名":function(){...}})
给【jQuery】扩展自定义方法
$.extend({"方法名":function(){...}})