jQuery

1|0一、jQuery简介

1|11. 什么是 jQuery

  • jQuery 是以轻量级、兼容多浏览器的JavaScript库 , jQuery现在使用的版本3.x 不支持IE678

1|22. jQuery的作用

  • jQuery使用户能够更方便地处理HTML Document、Events、实现动画效果、方便地进行Ajax交互,能够极大地简化JavaScript编程。它的宗旨就是:“Write less, do more.“

  • 直接通过jQuery对象点属性的方法对HTML文档的标签和其属性进行操作

1|33. jQuery对象

  • 通过jQuery的选择器,返回的都是jQuery对象。它的命名规范和JS对象的命名规范,以及他们之间的转换可查看我的博客 BOM和DOM操作 中的DOM操作。
  • jQuery对象和JS对象的方法不能混用。且jQuery对象是数组内部包含一个个JS对象的形式。

1|44. jQuery的使用

  • 方式一:有网的时候直接导入连接

    • <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
  • 方式二:

    • 将方式一的链接文件下载下来,再用src导入这个文件。

1|55. jQuery基础语法

  • $('标签或者属性').方法

1|66. jQuery的牛掰之处

  • 链式操作。因为每次对象点方法时,该方法都会返回这个对象,所以可以一直点方法。实现一行代码解决问题。

2|0二、查找标签之选择器

2|11. 基本选择器

1|0(1)id选择器

$("#id")

1|0(2)标签选择器

$("tagName")

1|0(3)class选择器

$(".className")

1|0(4)配合使用

$("div.c1") // 找到有c1 class类的div标签

1|0(5)组合选择器

$("#id2, .className, tagName") // 找到id为id2的和类中有className的和标签为tagName的这些标签

2|22. 层级选择器

// 类似CSS中的组合选择器 $("x y");// x的所有后代y(子子孙孙) $("x > y");// x的所有儿子y(儿子) $("x + y")// 找到所有紧挨在x后面的y $("x ~ y")// x之后所有的弟弟y

2|33. 基本筛选器

1|0(1)方法:

first // 第一个 同级中的第一一个 :last // 最后一个 同级中的最后一个 :eq(index)// 索引等于index的那个元素 :even // 匹配所有索引值为偶数的元素,从 0 开始计数 :odd // 匹配所有索引值为奇数的元素,从 0 开始计数 :gt(index)// 匹配所有大于给定索引值的元素 :lt(index)// 匹配所有小于给定索引值的元素 :not(元素选择器)// 移除所有满足not条件的标签 :has(元素选择器)// 选取所有包含一个或多个标签在其内的标签(指的是从后代元素找)

1|0(2)实例:

$("div:has(h1)")// 找到所有后代中有h1标签的div标签 $("div:has(.c1)")// 找到所有后代中有c1样式类的div标签 $("li:not(.c1)")// 找到所有不包含c1样式类的li标签 $("li:not(:has(a))")// 找到所有后代中不含a标签的li标签

1|0(3)自定义模态框

<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>自定义模态框</title> <style> .cover { position: fixed; left: 0; right: 0; top: 0; bottom: 0; background-color: darkgrey; z-index: 999; } .modal { width: 600px; height: 400px; background-color: white; position: fixed; left: 50%; top: 50%; margin-left: -300px; margin-top: -200px; z-index: 1000; } .hide { display: none; } </style> </head> <body> <input type="button" value="弹" id="i0"> <div class="cover hide"></div> <div class="modal hide"> <label for="i1">姓名</label> <input id="i1" type="text"> <label for="i2">爱好</label> <input id="i2" type="text"> <input type="button" id="i3" value="关闭"> </div> <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script> <script> var tButton = $("#i0")[0]; tButton.onclick=function () { var coverEle = $(".cover")[0]; var modalEle = $(".modal")[0]; $(coverEle).removeClass("hide"); $(modalEle).removeClass("hide"); }; var cButton = $("#i3")[0]; cButton.onclick=function () { var coverEle = $(".cover")[0]; var modalEle = $(".modal")[0]; $(coverEle).addClass("hide"); $(modalEle).addClass("hide"); } </script> </body> </html>

2|44. 属性选择器

1|0(1)语法:

[attribute] // 例如: $('[username]') [attribute=value]// 属性等于 // $('[username = "jason"]') [attribute!=value]// 属性不等于 标签名[属性名 = '属性值']

1|0(2)实例:

<input type="text"> <input type="password"> <input type="checkbox"> $("input[type='checkbox']");// 取到checkbox类型的input标签 $("input[type!='text']");// 取到类型不是text的input标签

2|55.表单筛选器

1|0(1)方法:

  • 很明显,既然是表单选择器,就都是和input标签和select标签有关的。
  • 在使用属性选择器且在没有标签参与筛选时,若此时属性时type时,则可以进行简写。如:$([type ='text'])可以简写成$(':text')
//input标签的type属性如下 :text :password :file :radio :checkbox :checked :submit :reset :button //select标签的属性如下: :selected // 例子: $(":checkbox") // 找到所有含有checkbox属性的标签

1|0(2)表单对象属性

:enabled :disabled :checked :selected // 例子: <form> <input name="email" disabled="disabled" /> <input name="id" /> </form> $("input:enabled") // 找到可用的input标签

1|0(3)jQuery表单筛选器的BUG

  • 在使用上面的表单筛选器的:checked方法时,他会将input标签中含有checked属性的标签和select标签中含有selected属性的标签都找出来。

2|66. 筛选器方法

1|0(1)当前标签的下面标签

  • 以下查找的都是当前标签的同级标签
$("#id").next() // 下一个标签 $("#id").nextAll() // 下面所有的标签 $("#id").nextUntil("#i2") // 下面标签直到id为i2的标签,不包含i2标签

1|0(2)当前标签的上面标签

  • 以下查找的都是当前标签的同级标签
// 用法与next对应的方法一样 $("#id").prev() $("#id").prevAll() $("#id").prevUntil("#i2") // 也不包含i2标签

1|0(3)当前标签的父亲标签

$("#id").parent() $("#id").parents() // 查找当前元素的所有的父辈元素 $("#id").parentsUntil() // 查找当前元素的所有的父辈元素,直到遇到匹配的那个元素为止。

1|0(4)当前标签的儿子和兄弟标签

$("#id").children();// 儿子们 $("#id").siblings();// 兄弟们,即上下都算

1|0(5)查找后代标签

$("div").find("p") // 查找div标签中的所有p标签 等价于 $("div p")

1|0(6)筛选

$("div").filter(".c1") // 从结果集中过滤出有c1样式类的 等价于 $("div.c1") // 找到有c1 class类的div标签
.first() // 获取匹配的第一个元素 .last() // 获取匹配的最后一个元素 .not() // 从匹配元素的集合中删除与指定表达式匹配的元素 .has() // 保留包含特定后代的元素,去掉那些不含有指定后代的元素。 .eq() // 索引值等于指定值的元素

2|77. 操作标签

  • 下面的方法都是用jQuery对象点的方式来使用

1|0(1)样式类

addClass();// 添加指定的CSS类名。 removeClass();// 移除指定的CSS类名。 hasClass();// 判断样式存不存在 toggleClass();// 切换CSS类名,如果有就移除,如果没有就添加。 // 例子: 1.原生JS设置css样式: obj.style.marginTop // 原来的写法 :margin-top obj.style.borderLeftWidth // 原来的写法 :border-feft-width obj.style.zIndex // 原来的写法:z-index obj.style.fontFamily // 原来的写法 :font-famliy obj.style.margin = 50px 2.jQuery对象设置css样式 $("p").css("color", "red"); //将所有p标签的字体设置为红色

1|0(2)位置操作

offset()// 获取匹配元素在当前窗口的相对偏移或设置元素位置 position()// 获取匹配元素相对父元素的偏移 scrollTop()// 获取匹配元素相对滚动条顶部的偏移 scrollLeft()// 获取匹配元素相对滚动条左侧的偏移 /* .offset()方法允许我们检索一个元素相对于文档(document)的当前位置。 和 .position()的差别在于: .position()是相对于相对于父级元素的位移 */

1|0(3)尺寸

height() width() innerHeight() innerWidth() outerHeight() outerWidth()

1|0(4)文本操作

html()// 取得第一个匹配元素的html内容 text()// 取得所有匹配元素的内容 /*对象直接点这两个方法时取文本值,在这两个方法的括号内添加值后,再对象点,就是修改文本值。且html()可以识别标签,同时能够添加标签和文本值*/ 如: $d2Evl.html('<h>kfkdjfk</h>')
  • input框的值和用户选择、上传的文件的值的操作
val()// 取得第一个匹配元素的当前值 val(初始值)// 设置所有匹配元素的值 val([值1, 值2])// 设置多选的checkbox、多选select的值 实例: <input type="checkbox" value="basketball" name="hobby">篮球 <input type="checkbox" value="football" name="hobby">足球 <select multiple id="s1"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> 设置值: $("[name='hobby']").val(['basketball', 'football']); $("#s1").val(["1", "2"])

1|0(5)属性操作

attr(属性名)// 返回第一个匹配元素的属性值 attr(属性名, 属性值)// 为所有匹配元素设置一个属性值 attr({k1: v1, k2:v2})// 为所有匹配元素设置多个属性和对应的属性值 removeAttr(属性名)// 从每一个匹配的元素中删除一个属性
  • 用于checkbox和radio
  • 虽然attr也可以操作属性,但是在checkbox和radio中,却不能动态的生效,因此这里用prop来操作checkbox和radio的checked属性。其他情况下还是用attr来操作属性。
  • 对于标签上有的能看到的属性和自定义属性都用attr
  • 对于返回布尔值的比如checkbox、radio和option的是否被选中都用prop。
prop() // 获取属性 prop('checked','checked') // 设置属性 prop('checked',false) // 移除属性

1|0(6)文档处理

  1. 添加到指定元素内部的后面

    $(A).append(B)// 把B标签追加到A标签内部的后面 $(A).appendTo(B)// 把A标签追加到B标签内部的后面
  2. 添加到指定元素内部的前面

$(A).prepend(B)// 把B前置到A $(A).prependTo(B)// 把A前置到B
  1. 添加到指定元素外部的后面
$(A).after(B)// 把B放到A的后面 $(A).insertAfter(B)// 把A放到B的后面
  1. 添加到指定元素外部的前面
$(A).before(B)// 把B放到A的前面 $(A).insertBefore(B)// 把A放到B的前面
  1. 移除和清空元素
remove()// 从DOM中删除所有匹配的元素。 empty()// 删除匹配的元素集合中所有的子节点。
  1. 替换

    replaceWith() replaceAll()
  2. 克隆

    clone()// 参数 ,括号内不加参数,表示克隆的是html代码和CSS样式。填上参数true后,表示连同该标签的绑定script代码一一起克隆。

2|88. 事件

1|01. 常用事件

click(function(){...}) hover(function(){...}) blur(function(){...}) focus(function(){...}) change(function(){...}) keyup(function(){...})
  • hover事件实例

  • hover事件分为两个部分,第一次是鼠标刚悬浮上去,第二次是鼠标离开是都会触发绑定的事件。且若值绑定一个事件,则两次都触发这个事件,若绑定两个事件,则第一次触发第一个事件,第二次触发第二个事件。

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p>苍茫的天涯是我的哎,绵绵的青山脚下一片海!</p> <script src="jQuery-3.3.1.js"> </script> <script> $('p').hover( function () { alert('来啦,老弟') }, function () { alert('慢走哦~') } ) </script> </body> </html> hover事件
  • 实时监控input输入值变化实例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>实时监听input输入值变化</title> </head> <body> <input type="text" id="i1"> <script src="jquery-3.2.1.min.js"></script> <script> /* * oninput是HTML5的标准事件 * 能够检测textarea,input:text,input:password和input:search这几个元素的内容变化, * 在内容修改后立即被触发,不像onchange事件需要失去焦点才触发 * oninput事件在IE9以下版本不支持,需要使用IE特有的onpropertychange事件替代 * 使用jQuery库的话直接使用on同时绑定这两个事件即可。 * */ $("#i1").on("input propertychange", function () { alert($(this).val()); }) </script> </body> </html>

1|02. 事件绑定

  1. 绑定方式一:

    .on( events [, selector ],function(){}) // 例子: jQuery对象.on('事件名',function () {})
  2. 绑定方式二:

    .事件名(function(){} , function(){}) // 两个function实现的功能不同
  • 注意: 像click、keydown等DOM中定义的事件,我们都可以使用.on()方法来绑定事件,但是hover这种jQuery中定义的事件就不能用.on()方法来绑定了,只能用方式二绑定。

1|03. 阻止后续事件

  • 常见的submit提交按钮,它的事件有两个,一个是提交form表单事件,一个是刷新页面事件。

  • 阻止方法一:

    return false; // 在function的代码最后加上这一句
  • 阻止方法二:

    e.preventDefault(); // e为function的一个形参,添加进function的小括号就可
  • 实例:

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>阻止默认事件</title> </head> <body> <form action=""> <button id="b1">点我</button> </form> <script src="jquery-3.3.1.min.js"></script> <script> $("#b1").click(function (e) { alert(123); //return false; e.preventDefault(); }); </script> </body> </html>

1|04.阻止事件冒泡

  • 事件冒泡发生的原因是:当一个标签A绑定了点击事件,且其内部包含的一个标签B也绑定了点击事件后,当我们点击标签B后,触发标签B的事件后,A标签的点击事件也会随后触发。因为A标签是一个块级标签,标签 B属于标签A,我们点击标签B后,也相当于点击了标签A
  • 解决方法:
e.stopPropagation(); // e是function的一个形参,填加了这行代码的function在执行完后,就不会使上级的标签的同样的事件触发了。且这行代码可以随便放置在function代码的任意一行。
  • 阻止事件冒泡实例
<body> <div>div <p>p <span>span</span> </p> </div> <script> $('div').click(function (e) { alert('div') }); $('p').click(function (e) { e.stopPropagation(); alert('p'); }); $('span').click(function (e) { alert('span'); // e.stopPropagation() // 阻止事件冒泡 }); </script> </body>
  • 登陆验证实例(即登陆时用户名和密码不能为空)
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>登录注册示例</title> <style> .error { color: red; } </style> </head> <body> <form id="myForm"> <label for="name">姓名</label> <input type="text" id="name"> <span class="error"></span> <label for="passwd">密码</label> <input type="password" id="passwd"> <span class="error"></span> <input type="submit" id="modal-submit" value="登录"> </form> <script src="jquery-3.2.1.min.js"></script> <script src="s7validate.js"></script> <script> function myValidation() { // 多次用到的jQuery对象存储到一个变量,避免重复查询文档树 var $myForm = $("#myForm"); $myForm.find(":submit").on("click", function () { // 定义一个标志位,记录表单填写是否正常 var flag = true; $myForm.find(":text, :password").each(function () { var val = $(this).val(); if (val.length <= 0 ){ var labelName = $(this).prev("label").text(); $(this).next("span").text(labelName + "不能为空"); flag = false; } }); // 表单填写有误就会返回false,阻止submit按钮默认的提交表单事件 return flag; }); // input输入框获取焦点后移除之前的错误提示信息 $myForm.find("input[type!='submit']").on("focus", function () { $(this).next(".error").text(""); }) } // 文档树就绪后执行 $(document).ready(function () { myValidation(); }); </script> </body> </html> 登录校验示例

1|05.文档加载(页面载入)

js中 1. window.onload = function(){ // 在这里写你的JS代码... } 2. 我们直接写在body最下方 jQuery中 1. $(document).ready(function(){ // 在这里写你的JS代码... }) 2. $(function(){ // 你在这里写你的代码 }) 3. 上面两种了解即可 我们直接写在body最下方

1|06. 事件委托

  • 事件委托有点像事件分发的意思。

  • 事件委托是通过事件冒泡的原理,利用父标签去捕获子标签的事件。

  • 为什么要事件委托:例如:本来一个div标签的内部有3个button标签,所有的button标签都绑定同一个点击事件,当点击任意一个button标签就会触发点击事件。但此时我们动态的在后来添加了一个button标签,点击他后,触发不了点击事件。

    此时,我们可以通过事件委托,即给button标签的父标签div绑定一个点击事件,并把绑定事件指向(委托给)button标签就可以解决问题了。

  • 事件委托的语法:

    // 表格中每一行的编辑和删除按钮都能触发相应的事件。 $("div").on("click", "button", function () { // 点击按钮触发的事件 })

__EOF__

本文作者BigSun丶
本文链接https://www.cnblogs.com/Mcoming/p/11892579.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   BigSun丶  阅读(156)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示