我的学习笔记

vuePress-theme-reco 我的学习笔记    2020 - 2024
我的学习笔记 我的学习笔记

Choose mode

  • dark
  • auto
  • light
时间轴
github
author-avatar

我的学习笔记

24

Article

17

Tag

时间轴
github

JQuery是怎么炼成的

vuePress-theme-reco 我的学习笔记    2020 - 2024

JQuery是怎么炼成的

我的学习笔记 2021-07-09 JS
## JQuery语法

# 基础语法

基础语法:$(selector).action()

美元符号定义JQuery

selector(选择器)查找相对应的HTML元素

action()执行对于元素的操作

实例

  • $(this).hide()---隐藏当前元素
  • $("p").hide()---隐藏所有<p>元素
  • $("p.test").hide()---隐藏所有class=“test”的<p>元素
  • $("#test").hide()---隐藏id="test"的元素

# 文档就绪事件

$(document).ready(function(){
	// 开始写JQuery代码
})

// 简写版本
$(function(){
    // 开始写JQuery代码
})

把JQuery代码写在文档就绪事件中是防止DOM在未完全加载完成前执行。如果在DOM没有加载之前可能会操作失败,下列情况就会失败

  • 试图隐藏一个存在的元素
  • 获得未完全加载的图像的大小

load和ready区别

window.onload $(document).ready()
执行时机 必须等待网页内容全部加载完毕(包括图片等),然后再执行被包裹代码 只需要等待网页中的DOM结构加载完毕,就能执行被包裹的代码(不会等待图片是否已经加载,只要DOM已经构建完成即可)
执行次数 只能执行一次,如果第二次,那么第一次的执行会被覆盖 可以执行多次,第N次都不会被上一次覆盖
简写方案 无 $(function(){})

# JQuery选择器

JQuery选择器基于CSS选择器,除此之外还有一些自定义的选择器

JQuery中所有选择器都以美元符号开头:$()

# 元素选择器

$(function(){
    $("button").click(function(){
     	alert("元素选择器")
    })
})

# ID选择器

$(function(){
    $("#test").click(function(){
     	alert("ID选择器")
    })
})

# class选择器

$(function(){
    $(".test").click(function(){
     	alert("class选择器")
    })
})

# 其他选择器

  • $("*")---选取所有元素
  • $("this")---选取当前HTML元素
  • $("p.intro")---选取class为intro的<p>元素
  • $("p:first")---选取第一个<p>元素
  • $("ul li:first")---选取第一个<ul>元素中的第一个<li>元素
  • $("ul li:first-chid")---选取每个<ul>元素中的第一个<li>元素
  • $("p:eq(数字)")---选取第数字+1个<p>元素

在JQuery中有一个比较有趣的现象,如果在父子选择器的基础上加上:first/:last/:eq(数字) 的话 只在子元素后面加上这三个指定词,那么:first/:eq(数字)就认定是在第一个父元素的基础上进行子元素的变动、:last就认定是在最后一个父元素的基础上进行子元素的变动

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title></title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
</script>
<script>
$(document).ready(function(){
  $("#btn1").click(function(){
    $("ul li:first").hide();
  });
});
	
$(document).ready(function(){
  $("#btn2").click(function(){
    $("ul li:last").hide();
  });
});
	
$(document).ready(function(){
  $("#btn3").click(function(){
    $("ul:last li:first").hide();
  });
});
	
$(document).ready(function(){
  $("#btn4").click(function(){
    $("ul li:eq(1)").hide();
  });
});
	
$(document).ready(function(){
  $("#btn5").click(function(){
    $("ul:eq(1) li:eq(2)").hide();
  });
});
	
</script>
</head>
<body>

<p>List 1:</p>
<ul>
  <li>Coffee</li>
  <li>Milk</li>
  <li>Tea</li>
</ul>

<p>List 2:</p>
<ul>
  <li>Coffee</li>
  <li>Milk</li>
  <li>Tea</li>
</ul>

	<button id="btn1">点我1</button>
	<button id="btn2">点我2</button>
	<button id="btn3">点我3</button>
	<button id="btn4">点我4</button>
	<button id="btn5">点我5</button>

</body>
</html>
  • $("[href]")---选取带有href属性的元素
  • $("a[target='_blank']")---选取所有target属性值等于"_blank"的<a>元素
  • $("a[target!='_blank']")---选取所有target属性值不等于"_blank"的<a>元素
  • $(":button")---选取所有type="button"的<input>元素和<button>元素
  • $("tr:even")---选取偶数位置的<tr>元素
  • $("tr:odd")---选取奇数位置的<tr>元素

# JQuery事件

目前只讨论一些常用的事件

# 鼠标事件

# click

点击事件

$("p").click(function(){
    alert("段落被点击了")
})

# dblclick

双击事件

$("p").dblclick(function(){
    alert("这个段落被双击。");
});

# mouseenter

鼠标进入事件

$("p").mouseenter(function(){
    $(this).css("background-color","yellow")
})

# mouseleave

鼠标离开事件

$("p").mouseleave(function(){
    $(this).css("background-color","green")
})

# hover

鼠标悬停事件

该事件中可以运行两个函数,分别配套mouseenter和mouseleave事件。如果只填写一个函数那么这个函数直接配套mouseenter和mouseleave两个函数

$("p").hover(function(){
    $("p").css("background-color","yellow");
},function(){
    $("p").css("background-color","pink");
});

# 键盘事件

# keypress

我认为是一个不算完全的键盘事件,官方文档解释是:键按下过程。但实际上如果你是用输入法的话就不能正常的触发事件,并且ALT、CTRL、SHIFT、ESC键也都不会触发,那么这个事件以后尽量不要使用,使用keydown或者keyup事件进行代替。

# keydown

键盘按下事件

$("input").keydown(function(){
    $("input").css("background-color","yellow");
});

# keyup

键盘松开事件

$("input").keyup(function(){
    $("input").css("background-color","pink");
});

# 表单事件

# submit

表单提交事件

$("form").submit(function(){
    alert("提交");
});

# change

表单内容修改事件

$("input").change(function(){
    alert("文本已被修改");
});

# focus

表单获得焦点事件

  $("input").focus(function(){
    $("span").css("display","inline").fadeOut(2000);
  });

# blur

表单失去焦点事件

$("input").blur(function(){
    alert("输入框失去了焦点");
});

# 文档/窗口事件

# load

元素加载事件

当图片全部加载时触发该事件(PS:在JQuery1.8中已经弃用)

$("img").load(function(){
    alert("图片已载入");
});

# resize

调整浏览器窗口大小事件

$(window).resize(function(){
    $('span').text(x+=1);
});

# scroll

元素滚动事件

$("div").scroll(function(){
    $("span").text(x+=1);
});

# JQuery效果

# 隐藏和显示

# hide

语法:$(selector).hide(speed,callback);

speed参数规定隐藏的速度,可以取"slow"、"fast"、毫秒

callback参数是隐藏完成后执行的函数名称

$("#hide").click(function(){
  $("p").hide();
});

# show

语法:$(selector).show(speed,callback);

speed参数规定显示的速度,可以取"slow"、"fast"、毫秒

callback参数是显示完成后执行的函数名称

$("#show").click(function(){
  $("p").show();
});

# toggle

语法:$(selector).toggle(speed,callback);

speed参数规定显示/隐藏的速度,可以取"slow"、"fast"、毫秒

callback参数是显示/隐藏完成后执行的函数名称

$("button").click(function(){
  $("p").toggle();
});

# 淡入淡出

# fadeIn

使不显示的元素显示

语法:$(selector).fadeIn(speed,callback)

speed参数规定效果的时长,可以取"slow"、"fast"、毫秒

callback参数是动作完成后执行的函数名称

$("button").click(function(){
  $("#div1").fadeIn();
  $("#div2").fadeIn("slow");
  $("#div3").fadeIn(3000);
});

# fadeOut

使显示的元素不显示

语法:$(selector).fadeOut(speed,callback)

speed参数规定效果的时长,可以取"slow"、"fast"、毫秒

callback参数是动作完成后执行的函数名称

$("button").click(function(){
  $("#div1").fadeOut();
  $("#div2").fadeOut("slow");
  $("#div3").fadeOut(3000);
});

# fadeToggle

使元素在fadeIn和fadeOut两种状态来回切换

语法:$(selector).fadeToggle(speed,callback)

speed参数规定效果的时长,可以取"slow"、"fast"、毫秒

callback参数是动作完成后执行的函数名称

$("button").click(function(){
  $("#div1").fadeToggle();
  $("#div2").fadeToggle("slow");
  $("#div3").fadeToggle(3000);
});

# fadeTo

使元素渐变为指定透明度

语法:$(selector).fadeTo(speed,opacity,callback)

speed参数规定效果的时长,可以取"slow"、"fast"、毫秒 ---- 必填

opacity参数为指定的透明度,范围在0~1之间 ---- 必填

callback参数是动作完成后执行的函数名称

$("button").click(function(){
  $("#div1").fadeTo("slow",0.15);
  $("#div2").fadeTo("slow",0.4);
  $("#div3").fadeTo("slow",0.7);
});

# 滑动

# slideDown

使元素向下滑动的方式出现

语法:$(selector).slideDown(speed,callback)

speed参数规定效果的时长,可以取"slow"、"fast"、毫秒

callback参数是动作完成后执行的函数名称

$("#flip").click(function(){
  $("#panel").slideDown();
});

# slideUp

使元素向上滑动的方式消失

语法:$(selector).slideUp(speed,callback)

speed参数规定效果的时长,可以取"slow"、"fast"、毫秒

callback参数是动作完成后执行的函数名称

$("#flip").click(function(){
  $("#panel").slideUp();
});

# slideToggle

使元素在slideDown和slideUp两种状态来回切换

语法:$(selector).slideToggle(speed,callback)

speed参数规定效果的时长,可以取"slow"、"fast"、毫秒

callback参数是动作完成后执行的函数名称

$("#flip").click(function(){
  $("#panel").slideToggle();
});

# 动画

**JQuery animate()方法用户创建自定义动画 **

animate()方法几乎可以操作所有CSS属性,但是要是用驼峰的形式书写属性名,如:padding-left应该写为paddingLeft

语法:$(selector).animate({params},speed,callback)

params参数定义形成动画的CSS属性,并且可以一次写多个CSS样式属性 ---- 必填

speed参数规定效果的时长,可以取"slow"、"fast"、毫秒

callback参数是动作完成后执行的函数名称

# animate

$("button").click(function(){
  $("div").animate({left:'250px'});
});

# animate操作多个属性

注意:animate几乎可以操作所有的CSS属性,并且必须使用驼峰命名法来书写属性名

$("button").click(function(){
  $("div").animate({
    left:'250px',
    opacity:'0.5',
    height:'150px',
    width:'150px'
  });
});

# animate使用相对值

注意:需要在值得前面加上+=或-=

$("button").click(function(){
  $("div").animate({
    left:'250px',
    height:'+=150px',
    width:'+=150px'
  });
});

# animate使用队列功能

JQuery提供对动画的队列功能。如果编写多个animate动画连在一起,那么在执行阶段,会使用队列的方式进行动画的执行,在先执行完成第一个animate动画之后才会执行第二个animate动画,以此类推。。。。

$("button").click(function(){
  var div=$("div");
  div.animate({height:'300px',opacity:'0.4'},"slow");
  div.animate({width:'300px',opacity:'0.8'},"slow");
  div.animate({height:'100px',opacity:'0.4'},"slow");
  div.animate({width:'100px',opacity:'0.8'},"slow");
});

# 停止动画

# stop

用于在动画完成前对它们进行停止(PS:可以停止动画和其他一切动画效果)

语法:$(selector).stop(stopAll,gotoEnd) stopAll参数规定是否清除动画列表。默认为false,即仅停止活动的动画,允许任何排入队列的动画向后执行。

goToEnd参数规定是否立即完成当前动画,默认是false。

$("#stop").click(function(){
  $("#panel").stop();
});

# JQuery链

在JQuery中允许使用链式操作

如果需要在相同的元素上运行多条JQuery命令,那么就可以使用链式操作。执行原理和队列的方式相同

$("#p1").css("color","red").slideUp(2000).slideDown(2000);

# JQuery HTML

# 获取内容和属性

JQuery拥有可操作HTML元素和属性的强大方法

# 获取内容-text()、html()、以及val()

text()只会显示所选元素的文本内容,不会显示多余的内容

html()会显示所选元素内包含的所有内容,包括HTML标签

  • text()
    • 设置或返回所选元素的文本内容
  • html()
    • 设置或返回所选元素的内容(包括HTML标记)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
</script>
<script>
$(document).ready(function(){
  $("#btn1").click(function(){
    //alert("Text: " + $("#test").text()='6544321');
	  $("#test").text('<h2>654321</h2>')
  });
  $("#btn2").click(function(){
    //alert("HTML: " + $("#test").html());
	  $("#test").html('<h1>654321</h1>')
  });
});
</script>
</head>

<body>
<p id="test">这是段落中的<b>粗体</b><i>斜体</i>文本。</p>
<button id="btn1">显示文本</button>
<button id="btn2">显示 HTML</button>
</body>
</html>
  • val()
    • 设置或返回表单字段的值
$("#btn1").click(function(){
  alert("值为: " + $("#test").val());
});

# 获取属性-attr()和prop()