(day47)jQuery

只谈情不闲聊 提交于 2019-12-05 00:56:35

一、初识jQuery

(一)jQuery介绍

  1. jQuery是一个轻量级、兼容多浏览器的JavaScript库
  2. 可以极大的简化JavaScript编程,宗旨:“Write less,do more”

(二)版本介绍

  • 1.x:兼容IE678,使用最为广泛的,官方只做BUG维护,功能不再新增。因此一般项目来说,使用1.x版本就可以了,最终版本:1.12.4 (2016年5月20日)
  • 2.x:不兼容IE678,很少有人使用,官方只做BUG维护,功能不再新增。如果不考虑兼容低版本的浏览器可以使用2.x,最终版本:2.2.4 (2016年5月20日)
  • 3.x:不兼容IE678,只支持最新的浏览器。需要注意的是很多老的jQuery插件不支持3.x版。目前该版本是官方主要更新维护的版本。

(三)jQuery对象

  1. jQuery对象是通过jQuery包装DOM对象后产生的对象

  2. jQuery对象是jQuery独有的

  3. 声明一个jQuery对象变量的时候在变量名前面加上$

  4. jQuery对象只能使用jQurey对象的方法,不能使用DOM对象的方法,DOM对象亦然

    $("#i1")  // jQuery对象
    $("#i1")[0]  // DOM对象
    $(js对象)  // Js对象转化为jQuery对象

(四)相关网站

官网:http://jquery.com

文档API:http://jquery.cuishifeng.cn/index.html

BootCDN:https://www.bootcdn.cn/jquery/

(五)基础语法

$(selector).action()

二、查找标签

(一)基本选择器

(1)id选择器

$("#id")

(2)标签选择器

$("tagName")

(3)class选择器

$(".className")

(4)条件选择器

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

(5)所有元素选择器

$("*")

(6)分组选择器

$("#id, .className, tagName")

(二)层级选择器

(1)后代选择器

x的所有后代y(子子孙孙),x和y可以为任意选择器

$("x y")

(2)儿子选择器

x的所有儿子y(子标签)

$("x > y")

(3)相邻选择器

紧挨在x后面的y

$("x + y")

(4)兄弟选择器

x之后的所有兄弟选择器(平行标签)

$("x ~ y")

(三)属性选择器[]

  1. [attribute]:选择含有属性的标签
  2. p[attribute]:选择含有属性的p标签,中间不能有空格
  3. [attribute=value]:选择属性=值的标签
  4. p[attribute=value]:选择属性=值的p标签,中间不能有空格
$('[name]')  // 含有name属性的标签
$('p[name]')  // 含有name属性的p标签
$('[name="tank"]')  // name属性为tank的标签
$('p[name="wick"]')  // name属性为wick的p标签

(四)基本筛选器:

  1. :first:第一个
  2. :last:最后一个
  3. :eq(index):索引等于index的元素
  4. :even:匹配所有索引值为偶数的元素,从0开始计数
  5. :odd:匹配所有索引值为奇数的元素,从0开始计数
  6. :gt(index):匹配所有大于给定索引值的元素
  7. :lt(index):匹配所有小于给定索引值的元素
  8. :not(元素选择器):移除所有满足not条件的标签
  9. :has(元素选择器):选取所有包含一个或多个标签在其内的标签(从后代元素找)
$("div:has(h1)")  // 找到所有后代中有h1的div标签
$("li:not(.c1)")// 找到所有不包含c1样式类的li标签

(五)表单筛选器

(1)input标签type参数值筛选

input标签中的type参数的值前加上冒号

$(':checkbox') // 找到所有type参数为checkbox的input标签

(2)表单对象属性

  1. :enabled
  2. disabled
  3. checked
  4. selected
// input标签对象属性筛选
<form>
  <input name="email" disabled="disabled" />
  <input name="id" />
</form>

$("input:enabled")  // 找到可用的input标签

// select标签对象属性筛选
<select id="s1">
  <option value="beijing">北京市</option>
  <option value="shanghai">上海市</option>
  <option selected value="guangzhou">广州市</option>
  <option value="shenzhen">深圳市</option>
</select>

$(":selected")  // 找到所有被选中的option

(3)BUG

  1. :checked会把input标签中的默认属性和select标签中的selected默认属性一起筛选出来
  2. 解决方法:$('input:checked'),通过标签限制

(六)、筛选器方法

(1)next

$('#id').next()  // 下一个元素
$('#id').nextAll()  
$('#id').nextUntil('#i2')

(2)prev

$('#id').prve()  // 上一个元素
$('#id').prveAll()
$('#id').prveUntil('#i2')

(3)parent

$('id').parent()  // 查找父元素
$('id').parents()  // 查找所有的父元素
$("#id").parentsUntil()  // 查找所有的父元素,知道某个元素为止

(4)儿子和兄弟元素

$('id').children()  // 儿子们,所有的子元素
$("#id").siblings()  // 兄弟们,所有的平行元素

(5)find

搜索所有与指定表达式匹配的元素

$('div').find("p")

// 等价于$('div p')

(6)filter

筛选出与指定表达式匹配的元素集合

$("div").filter(".c1")  // 从结果集中过滤出有c1样式类的
// 等价于$('div.c1')

(7)补充

.first()  // 获取匹配的第一个元素
.last()  // 获取匹配的最后一个元素
.not()  // 从匹配与元素的集合中删除与指定表达式匹配的元素
.has()  // 保留包含特定后代的元素,去掉那些不含有指定后代的元素
.eq()  // 索引值等于指定值的元素

三、操作标签

(一)样式操作

  1. addClass:添加指定的css类名
  2. removeClass:移除指定的css类名
  3. hasClass:判断样式存不存在
  4. toggleClass:切换class类名,如果有就移除,没有就添加
$('p').css('color','red')
// DOM操作
// tag.style.color = 'red'

(二)位置操作

  1. offset:获取匹配元素在当前窗口的相对偏移或设置元素位置
  2. position:获取匹配元素相对父元素的偏移
  3. scrollTop:获取匹配元素相对滚动条顶部的偏移,可用于回到顶部功能
  4. scrollLeft:获取匹配元素相对滚动条左侧的偏移

(三)尺寸

  1. height():文本
  2. width()
  3. innerWidth():文本+内边距
  4. innerHeight()
  5. outWidth():文本+内边距+边框
  6. outHeight()

(四)文本操作

  1. html():html内容

  2. text():文本内容

  3. val():值

  4. 获取被选中的checkbox或radio的值

    $("input[name='gender']:checked").val()

html()  // 获取第一个匹配元素的HTML内容
html(val)  // 设置所有匹配元素的html内容

text()// 取得所有匹配元素的内容
text(val)// 设置所有匹配元素的内容

val()// 取得第一个匹配元素的当前值
val(val)// 设置所有匹配元素的值
val([val1, val2])// 设置多选的checkbox、多选select的值

(五)属性操作

  1. 对于标签上有的能看到的属性和自定义属性都用attr
  2. 对于返回布尔值的比如checkbox、radio和option的是否被选中都用prop。

(1)attr

  1. attr(attrName):返回第一个匹配元素的属性值
  2. attr(attrName,attrValue):为所有匹配元素设置值
  3. attr({k1:v1,k2:v2}):为所有配元素设置多个值
  4. removeAttr():从每一个匹配的元素删除一个属性

(2)prop

  1. prop():获取属性
  2. prop(attrName,''):删除属性

注意:

1.x和2.x版本的jQuery中使用attr对checkbox和radio进行赋值操作时,会出bug,3.x版本则不会有这个问题。为了兼容性,在checkbox和radio的时候尽量使用特定的prop

<input type="checkbox" value="1">
<input type="radio" value="2">
<script>
  $(":checkbox[value='1']").prop("checked", true);
  $(":radio[value='2']").prop("checked", true);
</script>

(六)标签操作

(1)append

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

$(A).append(B)  // 把B追加到A内部最后
$(A).appendTo(B)  // 把A追加到B内部最后

(2)prepend

添加到指定元素内部的前面

$(A).prepend(B)  // 把B前置到A第一个子标签
$(A).prependTo(B)  // 把A前置到B第一个子标签

(3)after

添加到指定元素外部的后面

$(A).after(B)// 把B放到A的后面
$(A).insertAfter(B)// 把A放到B的后面

(4)before

添加到指定元素外部的前面

$(A).before(B)// 把B放到A的前面
$(A).insertBefore(B)// 把A放到B的前面

(5)remove和empty

移除和清空元素

remove()// 从DOM中删除所有匹配的元素。
empty()// 删除匹配的元素集合中所有的子节点。

(6)replace

  1. replaceWith()
  2. replaceAll()

(7)clone

  1. clone():只克隆标签,不克隆事件
  2. clone(true):克隆标签,包括事件
<script>
  // clone方法不加参数true,克隆标签但不克隆标签带的事件
  $("#b1").on("click", function () {
    $(this).clone().insertAfter(this);
  });
  // clone方法加参数true,克隆标签并且克隆标签带的事件
  $("#b2").on("click", function () {
    $(this).clone(true).insertAfter(this);
  });
</script>

五、事件

(一)常用事件

  1. click:点击

  2. hover:鼠标悬浮

    $('p').hover(函数1,函数2)
    // 1. 鼠标悬浮时触发函数1,移开时触发函数2
    // 2. 如果只有一个函数,悬浮和离开时都会触发一次
  3. blur:失去焦点

  4. focus:聚焦

  5. change:域内容发生改变

  6. keyup:按键松开

  7. input:可以实时监听input框内的实时变化

(二)事件绑定

(1)on

.on(events [,selector],function(){})

  1. events:事件
  2. selector:选择器(可选)
  3. function:事件处理函数

(2)off

.off(events [,selector],function(){})

off() 方法移除用 .on()绑定的事件处理程序。

(三)阻止后续事件执行

  1. return false:常见阻止表单提交等
  2. e.preventDefalut()
<!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. 子标签触发事件后会逐层传递给父标签,称为事件冒泡

  2. 解决办法:e.stopPropagation();

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>阻止事件冒泡</title>
</head>
<body>
<div>
    <p>
        <span>点我</span>
    </p>
</div>
<script src="jquery-3.3.1.min.js"></script>
<script>
    $("span").click(function (e) {
        alert("span");
        e.stopPropagation();
    });

    $("p").click(function () {
        alert("p");
    });
    $("div").click(function () {
        alert("div");
    })
</script>
</body>
</html>

(五)事件委托

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

$('body').on('click','button',function () {
    alert('123')
})
// 通过这个可以在创建添加标签时,同时加上原标签的事件

(六)页面载入ready

当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。这是事件模块中最重要的一个函数,因为它可以极大地提高web应用程序的响应速度。

$(document).ready(function(){
// 在这里写你的JS代码...
})

// 简写
$(function(){
// 你在这里写你的代码
})
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!