前端入门第九步:JQuery 快速网页交互开发

249 阅读8分钟

[TOC]

JQuery基础

主要对 选择元素的方法 进行大量优化

简介

版本

1.X:兼容 IE6/7/8 ,工作中最常见的,一般学习1.12版本

2.X:不兼容 IE6/7/8 ,多用于JQuery官方调整bug使用。开发中不使用

3.X:不兼容 IE6/7/8 ,只能用于高版本浏览器中使用,是现在官方主要维护

下载

官网下载:jquery.com/download/

辅助下载地址:www.bootcdn.cn/jquery/

min版本

普通版是存在回车、空格,调用起来会有点影响

min版是去除了回车、空格,调用起来略快

使用

引用JQuery

直接用 script 标签引入

选择元素(标签)

//$() 方法 该方法用于获取元素节点,并且十分强大
$('#id')  // 通过  id 属性获取
$(".id")  // 通过class属性获取

// 传统 dom树 获取
getElementById("id");
getElementsByClass("class");

获取/修改样式

// 获取某一样式属性
$("#id").css("属性名");

// 修改某一样式属性值
$("#id").css("属性名", "属性值");

注意:若是以class属性、标签名等选取的多个dom节点,修改样式时会将同class的所有元素一起修改

事件

$("#id").click(function(){
   // 点击事件 
});

动画效果

$("#id").animate( styleObj , time );
// styleObj为动画结束时元素样式,数据类型为对象
// time表示动画时间

对象

在JQuery对象中,内部封装了大量属性方法,如 css() 、 html() 、 animation()

方法/属性说明
css()方法样式获取、修改
html()方法标签内容修改
animation()方法动画样式
length属性元素个数
size()方法元素个数

注意:

通过JQuery获取到的元素不能直接使用原生js的对象

JQuery与原生js dom对象转换

JQuery => JS

let $p = $("p");
$p[0].innerText = "你好";

JS => JQuery

let op = document.getElementsByTagName("p")[0];
$(op).css("background-color","skyblue");

筛选选择器

基础选择器后面增加一些筛选词,筛选出前面选择器的选中内容中一部分

或者可以作为高级选择器一部分

筛选词说明
$(":first")第一项
$(":last")最后一项
$(":eq(index)")下标为index的项
$(":gt(index)")大于下表为index的项
$(":lt(index)")小于下标为index的项
$(":obb")下标为奇数的项
$(":even")下标为偶数的项
$(":not(selector)")去除所有与给定选择器匹配的元素

筛选方法

作用与筛选选择器相似,区别在于一个写在内,一个封装成方法

方法说明
first()第一项
last()最后一项
eq( index )下标为index的项

JQuery常用方法

标签内容操作

html方法

作用:获取/修改文本内部标签

$().html()//获取内部子标签及文本
$().html( 修改内容 )//修改标签内容

// 与之相似的原生js
document.getElementById().innerHTML;

text方法

作用:获取/修改标签内部文本

$().text()//获取内部文本
$().text( 修改内容 )//修改标签内容

// 与之相似的原生js
document.getElementById().innerText;

val方法

作用:用来获取或者设置表单元素内容

$().val()//获取内部文本
$().val( 修改内容 )//

// 与之相似的原生js
document.getElementById().value

标签属性操作

attr方法

作用:用来获取或者设置标签的属性值

$().attr( 属性名 )//获取某个属性值
$().attr( 属性名, 属性值 )//修改某个属性值

//  与之相似的原生js
document.getElementById().getAttribute(属性名)
document.getElementById().setAttribute(属性名,属性值)

removeAttr方法

作用:用来移除标签的属性值

$().removeAttr( 属性名 )//删除某一属性

//  与之相识的原生js
document.getElementById().removeAttribute(属性名)

prop方法

作用:与attr方法相似,都是获取或者设置标签的属性值

$().prop( 属性名 )//获取某个属性值
$().prop( 属性名, 属性值 )//修改某个属性值

//  与之相似的原生js
document.getElementById().getAttribute(属性名)
document.getElementById().setAttribute(属性名,属性值)

标签样式操作

css方法

  • 获取元素某一样式属性值
$().css( 样式属性名 )//获取
  • 修改/设置
$().css( 样式属性名, 样式属性值 )

// 可以输入对象来一次性修改多个样式
$().css({
    width:300,
    height:400
})

//注意:复合属性的单一写法:要么 横线隔开,要么驼峰命名法
$().css( "backgroundColor" );
$().css( "background-color" );

标签类名操作

addClass方法

作用:添加类名

$().addClass( 类名 )

//  与之相似的原生js
document.getElementById().className +=""

removeClass方法

作用:移除全部类

$().removeClass()//不可传参

//  与之相似的原生js
document.getElementById().className = ""

toggleClass方法

作用:添加/移除目标类名

$().toggleClass( 类名 );
// 原来有该类就会自动移除
// 原来没有该类就会添加

hasClass方法

作用:判断该标签是否有某一属性

$().hasClass( 属性名 )
//返回值为:true 和 false

//  与之相似的原生js
document.getElementById().hasAttribute( 属性名 )

标签事件方法

点击事件

$().click(function(){
		
})

// 原生js
document.getElementById().addLinster("click",function(){
    
})

mouseenter方法

触发:鼠标进入元素时触发

$().mouseenter(function(){
    
})

// 原生js
document.getElementById().addLinster("mouseover",function(){
    
})

//注意:mouseenter没有事件冒泡,而mouseover有

mouseleave方法

触发:鼠标离开元素时触发

$().mouseleave(function(){
    
})

// 原生js
document.getElementById().addLinster("mouseout",function(){
    
})

//注意:mouseleave没有事件冒泡,而mouseout有

hover方法

$().hover( mouseenter方法,mouseleave方法 )
// hover想当然整合了mouseenter方法和mouseleave方法

$(this)指向自己

//在触发事件时,指向事件原
$().click(function(){
    $(this).css("background","red");
})

标签节点操作

$(this)指向自己

//在触发事件时,指向事件原
$().click(function(){
    $(this).css("background","red");
})

parent方法

作用:获取到自己的父级,获取到的对象为JQuery对象

可以直接使用Jquery方法属性

$().parent()

children方法

作用:获取到自己子级中的所有Jquery对象

$().children()

// 也可以在children方法内继续选取
$().children("p");//标签
$().children("#id");//id属性

siblings方法

作用:获取到除自己以外的其他同级兄弟JQuery对象

$().siblings();

// 也可以在siblings方法内继续选取
$().children("p");//标签
$().children("#id");//id属性

链式调用

$().click(function () {
    $(this).css("background-color", "red")        // 自己变红色
    .siblings().css("background-color", "gold")   // 兄弟变金色
    .parent().css("background-color", "pink")     // 父级变粉色
    .siblings().css("background-color", "blue")   // 父级的兄弟变蓝色
    .children().css("background-color", "yellowgreen")  // 父级的兄弟的子级变黄绿色
})

自行感悟即可

获取子级方法

作用:获取到子级内目标元素/元素组

方法:find()

$().find("span");
// 可以修改特定子级元素(组)
$().find("span").css({
    color:red,
    backgroundColor:black
})

兄弟节点获取

方法说明
$().next()下一个兄弟
$().prev()上一个兄弟
$().nextAll()后面所有兄弟
$().prevAll()前面所有兄弟

方法内可以不写参数,会自动找下一个;若加参数,则自动寻找下一个目标参数的兄弟

祖先级节点

作用:获取到父级、父级的父级、一直获取到body前的所有父级

方法:$().parents()

JQuery排序和动画

排序

eq方法

结构:eq( number )

作用:排序并选取序数第number个元素

// 排序与自己原来的父级没有关系,只与位置有关
$("p").eq(1);
// 所有p标签中第二个(注意:序数是从0开始)

$(".div").eq(8);
// 所有class属性为div的标签中第九个(注意:序数是从0开始)

index方法

结构:index()

作用:获取在同一父级同级兄弟的序数

$("p").index();

排他思想

思想:某一些触发事件时,触发源独一无二,其他同级兄弟都是默认

$().click(function(){
    $(this).addClass("on").sublings().removeClass("on");
})

例子:Tab导航栏

// 上面导航栏为 .title span
// 内容部分为 .content ul
$(".title span").mouseenter(function(){
    $(this).addClass("current").siblings().removeClass("current");
    let index = $(this).index();
    $(".content ul").eq(index).addClass("on").siblings().removeClass("on");
})

遍历

each方法

作用:遍历元素组内每一个元素

$().each(function(){
	console.log($(this).index());	
})

// 也可以为每个元素添加事件
$().each(function(i){
    $(this).click(function(){
        console.log(i)
    })
})

优点:

  • each内部this指向每一次遍历的元素
  • each方法内部可以传参数 i,表示在遍历对象中的位置

入口函数

加载事件

在原生js中,加载事件一般为: window.onload

但加载事件一般都要等到页面所有资源(如DOM树、音频、视频、图片等)加载完成后才触发

window.onload = function() {}

JQuery的入口函数

在JQuery中,写有入口函数,只会在DOM树加载完成后执行

可以利用入口函数来代替加载事件

$(document).ready(function(){
    
})
// 简化入口函数
$(function(){
    
})

显示与隐藏

正常显示隐藏:宽度高度缩放+透明化

显示

方法:show()

参数效果
无参数直接显示,没有过度动画
Number在规定时间内出现显示动画,单位:毫秒
"slow"慢速动画显示
"normal"正常动画显示
"fast"快速动画显示

注意:show方法是在 css的display中修改的

隐藏

方法:hide()

参数效果
无参数直接隐藏,没有过度动画
Number在规定时间内出现隐藏动画,单位:毫秒
"slow"慢速动画隐藏
"normal"正常动画隐藏
"fast"快速动画隐藏

注意:hide方法是在 css的display中修改的

切换

方法:toggle()

参数效果
无参数直接隐藏/显示,没有过度动画
Number在规定时间内出现隐藏/显示动画,单位:毫秒
"slow"慢速动画隐藏/显示
"normal"正常动画隐藏/显示
"fast"快速动画隐藏/显示

滑动式显示隐藏

方法说明
slideDown()滑动显示
slideUp()滑动隐藏
slideToggle()滑动切换

参数:

参数效果
不传参默认动画过渡时间为400毫秒
Number设置动画过度时间,单位为毫秒
"slow"慢速动画过度
"normal"正常动画过渡
"fast"快速动画过渡

注意:

  • 切换原理都是在css的display中修改的
  • 若元素没设置宽高,不会有动画效果
  • 动画效果为高度变化

淡入淡出

方法效果
fadeIn()淡入
fadeOut()淡出
fadeToggle()切换
fadeTo()淡入/淡出到某一特定透明度

参数:

参数效果
不传参默认动画过渡时间为400毫秒
Number设置动画过度时间,单位为毫秒
"slow"慢速动画过度
"normal"正常动画过渡
"fast"快速动画过渡

注意:

  • fadeTo( time, i )方法中,time表示动画时长,i表示透明度( 范围在0~1 )

动画

动画方法

方法:animate()

作用:执行css属性集的自定义函数

语法:$().animate( styles, speed, easing, callback )

​ 参数1:css属性集合,确定最后位置的样式

​ 参数2:规定动画速度,可以参考之前显示隐藏的时间参数,默认"normal",可省略

​ 参数3:设置动画效果,原理为easing函数

​ 参数4:animate函数执行完后,要执行的函数

补充:easing函数

属性值说明
linear匀速
swing开始结束慢,中间快
easeInCubic逐步变快
easeOutCubic逐步变慢

动画排队

  • 同一个元素对象身上,如果定义了多个动画,动画会按照代码执行顺序排队等待执行
  • 其他非运动的代码(如宽度高度等非位置属性),不会等待
  • 不同元素动画不会相互干涉

动画延迟

方法:delay( time )

作用:设置延时

$().animate({top:30,left:30}).delay(300);

终止动画

方法:stop( boolean1 , boolean2 )

​ 第一个参数:是否清空后面动画排队,true表示清空,false表示只停止当前动画

​ 第二个参数:是否让当前动画立即完成,true表示立即完成并终止,false表示立即终止

上述参数都是布尔型

第二个参数默认值为true

清空动画排队思路

防止自己被多次触发执行,需要有及时清理排队的动画

方法一:

​ 每个动画前面写个 stop(true),及时清除

$().click(function(){
	$(this).children().stop(true).slideUp(2000);
})

方法二:

​ 使用函数节流=> is(":animated")

$().click(function(){
    // 判断当前是否有动画过渡,有就节流
	if($(this).children().is(":animated"))
        return;
    $(this).children().stop(true).animation({});
})

JQuery 节点操作

增删元素

添加元素

语法:

// 添加的新元素
let li = $("<li>123</li>");

// 添加进去
$("ul").append(li);

// 也可以一步到位
$("ul").append($("<li>123</li>"));

移除元素

语法:

// 元素自我删除
$(id).remove();

// 父级删除所有子级元素
$().empty()// 清除所有子节点以及子节点上面的事件
// 也可以设置空的html方法
$().html("");

克隆元素

语法:

let newBox1 = $("#box").clone(false);// 只克隆html元素,不克隆js部分
let newBox2 = $("#box").clone(true); // 克隆html元素以及所涉及的js部分

操作元素尺寸

内容宽度高度方法

获取语法:

$().width();// 获取宽度
$().height();//获取高度

设置语法:

$().width( Number );// 设置宽度,传参为数字型
$().height( Number );// 设置高度,传参同上

注意:设置的宽高原理是设置在行内式

包括padding的宽高

获取语法:

$().innerWidth(); // 获取宽度+左右padding
$().innerHeight(); //获取高度+上下padding

设置语法:

$().innerWidth( Number ); // 设置包含padding的宽度,注意:不会修改padding属性
$().innerHeight( Number ); //设置包含padding的高度,注意:不会修改padding属性

包括padding+border的宽高

获取语法:

$().outerWidth();// 获取宽度+padding左右+margin左右
$().outerHeight();// 获取高度+padding上下+margin上下

设置语法:

$().outerWidth( Number ); // 设置包含padding、margin的宽度,注意:不会修改padding、margin属性
$().outerHeight( Number ); //设置包含padding、margin的高度,注意:不会修改padding、margin属性

操作元素位置

获取元素距离文档位置

语法:

$().offset();
$().offset().left;// 相对于左位置(x轴)
$().offset().top; // 相对于上位置(y轴)

注意:获取到的数据是相对于网页的,并不是相对于上一个定位父级

获取相对于上一个定位参考元素的位置

语法:

$().position();
$().position().left;
$().position().right;

注意:获取到的数据是相对于上一级定位父级的,并不是相对于网页

卷去页面距离

语法:

// 无参时为获取卷页距离
$().scrollTop();
// 有参时为跳转到对应的卷页距离
$().scrollTop( Number );

JQuery事件操作

注册事件

简单方式注册

语法:$().事件名( 执行函数 );

事件函数名说明
click()点击事件
dbclick()双击事件
mouseenter()鼠标进入事件
mouseleave()鼠标移出事件
scroll()鼠标中键滚动事件
select()表单选中

on注册方法

语法:

$().on( 事件类型 , 执行函数 );

// on方法还可以委托让子元素执行
$("ul").on("click","li",function(){
    
})

移除事件

off方法

语法:

$().off( 事件类型, 执行函数名 );

// 也可以移除委托给子级的事件
$("ul").off( "click", "li", fn2 );

触发事件

trigger方法

语法:

$().trigger( 事件名 );

// 此方法可以让一些不触发的事件立即触发
$("button").click(function(){
    $("input").trigger("click");
})
$("input").click(function(){
    $(this).css({background:"#000",color:"#fff"});
    $(this).select();
})

事件对象

事件处理程序中第一个形参为e

$().click(function(e){
    
})

通过事件对象e 获取的属性方法

事件属性/方法说明
鼠标
e.clientX/Y参考浏览器确定鼠标横纵坐标
e.pageX/Y参考文档确定鼠标横纵坐标
e.offsetX/Y参考触发元素确定鼠标横纵坐标
键盘
e.keyCode返回键盘输入的键码数字
e.altKey/shiftKey/ctrlKey检查”alt“、”shift“、”ctrl“是否被按下
true表示按下、false表示未按下
公共
e.target触发事件的dom元素
e.currentTarget事件冒泡阶段中
e.prevventDefault()阻止默认行为
e.stopPropagation()阻止事件冒泡

多库共存问题

现象:$符号被占用

<script src="./js/jquery.js"></script>
<script> let $ = 123 </script>
<!-- 解决方法 -->
<script>
	// 方法一:使用jQuery标识符进行调用
    jQuery("button")click(function(){
        ...
    })
    
    // 方法二:释放$符号,设置新符号
    let $1 = jQuery.noConflict();
    $1("button").click(function(){
        ...
    })
</script>

JQuery插件使用

获取方式

搜索 百度、Gitee、GitHub 等网站

浏览 CSDN、知乎、简书等技术性 文章

注意:插件都是非官方的,都是个人完成的

使用

找到并下载,再导入