文章目录
jQuery简介
1. 介绍
jQuery是JavaScript的工具库,对原生JavaScript中的DOM操作、事件处理、包括数据处理和Ajax技术等进行封装,提供更完善,更便捷的方法。
2. 使用
1)引入
先引入jquery文件,才能使用jquery语法
- CDN 有网(备用)
- 本地文件(常用)
2)工厂函数 - $()
"$()"函数用于获取元素节点,创建元素节点或将原生JavaScript对象转换为jquery对象,返回 jQuery 对象。jQuery 对象实际是一个类数组对象,包含了一系列 jQuery 操作的方法。
例如 :
//$()获取元素节点,需传入字符串的选择器
$("h1")
$("#d1")
$(".c1")
$("body,h1,p")
//选择器的特点,与样式选择器一致
<title>Document</title>
</head>
<body>
<div id="header"></div>
<!-- 一定要先引入文件 再使用jQuery操作 -->
<script src="../js/jquery.min.js"></script>
<script>
var header = document.getElementById('header')
// jquery
// Uncaught ReferenceError: $ is not defined jQuery文件没有引入或引入失败
console.log($);
var $header = $('#header');
// 原生JS对象 或 DOM对象
// 原生JS对象可以使用document提供的方法和属性
// 如: innerHTML 对象.className
// 对象.onclicke
// header.innerHTML = 'hello world';
console.log(header);
//jQuery对象 可以使用jQuery提供的方法和属性
console.log($header);
$header.html('hello world');//传递参数的方式,之前是属性赋值。
// js对象-->jq对象
console.log($(header));
// jq对象-->js对象
console.log($header[0]);
// document.getElementById('header').innerHTML = 'hello world';
// 定义一个函数 通过id查找元素
// function $$(id){
// return document.getElementById(id);
// }
// $$('header').innerHTML = 'hello world';
</script>
</body>
3)原生JavaScript对象与jQuery对象
原生JavaScript对象与jQuery对象的属性和方法不能混用。可以根据需要,互相转换 :
- 原生JavaScript转换jQuery对象
$(原生对象),返回 jQuery 对象 - jQuery对象转换原生JavaScript对象
- 方法一 : 根据下标取元素,取出即为原生对象
var div = $(“div”)[0]; - 方法二 : 使用jQuery的get(index)取原生对象
var div2 = $(“div”).get(0);
- 方法一 : 根据下标取元素,取出即为原生对象
4)jQuery获取元素
jQuery通过选择器获取元素,$(“选择器”)
选择器分类 :
- 基础选择器
标签选择器:$("div")
ID 选择器:$("#d1")
类选择器:$(".c1")
群组选择器:$("body,p,h1")
- 层级选择器
后代选择器: $("div .c1")
子代选择器: $("div>span")
相邻兄弟选择器: $("h1+p") 匹配选择器1后的第一个兄弟元素,同时要求兄弟元素满足选择器2
通用兄弟选择器: $("h1~h2") 匹配选择器1后所有满足选择器2的兄弟元素
- 过滤选择器,需要结合其他选择器使用。
:first
匹配第一个元素 例:$("p:first")
:last
匹配最后一个元素 例:$("p:last")
:odd
匹配奇数下标对应的元素
:even
匹配偶数下标对应的元素
:eq(index)
匹配指定下标的元素
:lt(index)
匹配下标小于index的元素
:gt(index)
匹配下标大于index的元素
:not(选择器)
否定筛选,除()中选择器外,其他元素
<title>查找页面元素</title>
</head>
<body>
<h1>上面的兄弟 你们好吗?</h1>
<ul id="list">
<li >item1</li>
<li class="item">item2</li>
<li class="item">item3</li>
<li >item4</li>
</ul>
<h1>hello world</h1>
<p>中午吃啥?</p>
<script src="../js/jquery.min.js"></script>
<script>
// $('li:last').css('color','red');
//奇数索引值 第二个(1) 第四个(3)
$('li:odd').css('color','red');
$('li:even').css('color','blue');
// eq(i) 匹配索引值等于i的元素
// lt(i) 小于i
// gt(i) 大于i
$('li:eq(2)').css('font-size','30px');
$('li:lt(2)').css('font-weight','bold');
// 找全部li中除了最后一个li的其他元素
$('li:not(li:last)').css('text-align','center');
// $('#list').parents()//找父元素和祖先元素,可以传入选择器作参数精确查找某些祖先元素
// $('#list').parent()//找父元素
// $('#list').siblings() 查找全部的兄弟元素 ,可以传入选择器作参数精确查找某些兄弟元素
// console.log($('#list').siblings('p'));
// 选择器1+选择器2 相邻兄弟选择器
// 找选择器1 后面的第一个 符合选择器2 的元素
// $('#list+h1').css('color','red');//生效
// $('#list+p').css('color','red');//不生效
// console.log($('#list+p'));//空的jq对象
// 选择器1~选择器2 通用兄弟选择器
// 找选择器1 后面所有 符合选择器2 的元素
// $('#list~p').css('color','blue');
// list.style = 'list-style:none';
// $('#list').css('list-style','none');
// $('.item').css('color','red');
// $('li').css('font-weight','bold');
</script>
</body>
5)操作元素内容
html() //设置或读取标签内容,等价于原生innerHTML,可识别标签语法
text() //设置或读取标签内容,等价于innerText,不能识别标签
val() //设置或读取表单元素的值,等价于原生value属性
<input type="text" id="key">
<h1>xxx</h1>
<script src="../js/jquery.min.js"></script>
<script>
// input.value --> $('#key').val()
// h1.innerHTML = 值
// key.onchange = function(){}
$('#key').change(function(){
// 当值发生改变时 将文本框的值放入h1中显示
// h1.innerHTML = input.value
$('h1').html($('#key').val());
});
</script>
</body>
6)操作标签属性
-
attr(“attrName”,“value”)
设置或读取标签属性 -
prop(“attrName”,“value”)
设置或读取标签属性
注意 :在设置或读取元素属性时,attr()和prop()基本没有区别;但是在读取或设置表单元素(按钮)的选中状态时,必须用prop()方法,attr()不会监听按钮选中状态的改变,只看标签属性checked是否书写 -
removeAttr(“attrName”)
移除指定属性<title>操作元素属性</title> </head> <body> <div class="red" id="div1"> hello world </div> <div> <input type="text" placeholder="请输入用户名"> </div> <div> <input type="checkbox" id="canSubmit">请阅读并同意协议 </div> <button id="btn">提交</button> <script src="../js/jquery.min.js"></script> <script> // 当按钮被点击的时候 判断用户是否选中协议 // btn.onclick = function(){} $('#btn').click(function(){ // 如果用户选中协议 弹框提示提交成功 // 如果用户没有选中协议 弹框提示 请勾选协议 if($('#canSubmit').prop('checked')){ alert('提交成功') }else{ alert('请勾选协议') } // 通过checked属性判断按钮是否被选中 // var res = $('#canSubmit').attr('checked') // var res2 = $('#canSubmit').prop('checked'); // console.log($('#canSubmit')); // console.log('attr的结果'+res); // console.log('prop的结果'+res2); }) // 获取元素属性的值 // var res = $('#div1').attr('class'); // console.log(res); // var res = $('#div1').prop('class'); // console.log(res); // 修改/设置元素属性的值 // $('#div1').attr('id','title'); // $('#div1').prop('id','title'); </script> </body>
7)操作标签样式
- 为元素添加id/class属性,对应选择器样式
- 针对类选择器,提供操作class属性值的方法
addClass("className") //添加指定的类名
removeClass("className")//移除指定的类型,如果参数省略,表示清空class属性值
toggleClass("className")//结合用户行为,实现动态切换类名.如果当前元素存在指定类名,则移除;不存在则添加
<title>通过class属性修改样式</title>
<style>
.red{
color:red;
/* font-size: 30px; */
font-weight: bold;
}
.center{
text-align: center;
}
</style>
</head>
<body>
<div class="center">hello world</div>
<script src="../js/jquery.min.js"></script>
<script>
// $('div').addClass('red');
// $('div').removeClass('center');
// 切换样式
// 当前有样式red 就移除样式red
// 当前没有样式red 就添加样式red
$('div').click(function(){
$('div').toggleClass('red');
})
//
$('div').css('width','300px').css('height','300px').css('background-color','green');
$('div').css({
"width":"300px",
"height":"300px",
"background-color":"lightgreen",
})
</script>
</body>
//-------------------------------------------------------------------//
<title>导航条</title>
<style>
/* 清除默认样式 */
a{
color: #222;
text-decoration: none;
}
ul{
margin: 0;
padding: 0;
/* 清除列表样式 小圆点 */
list-style: none;
border: 1px solid red;
/* 解决子元素浮动父元素没有高度的问题 */
overflow: hidden;
}
/* 10:00~10:15 */
li{
float: left;
}
.first{
color: #999;
margin: 5px 0;
}
.item{
margin: 5px 10px;
padding: 0 5px;
}
.active,.item:hover{
background-color: red;
}
.active>a,.item:hover>a{
color: #fff;
}
</style>
</head>
<body>
<ul>
<li class="first">难度:</li>
<li class="item"><a href="#">全部</a></li>
<li class="item"><a href="#">初级</a></li>
<li class="item active">
<a href="#">中级</a>
</li>
<li class="item"><a href="#">高级</a></li>
</ul>
<script src="../js/jquery.min.js"></script>
<script>
// day07/nav.html
// 14:48~15:05
$('.item').click(function(){
// 点击当前item时添加样式类active,兄弟们移除样式active
$(this).addClass('active').siblings('.active').removeClass('active');
// 查找所有的item移除class active
// 为当前元素添加class active
// this 是原生js对象 --> $(this)jq对象
// $('.item').removeClass('active');
// $(this).addClass('active');
})
// var items = document.getElementsByClassName('item');
// console.log(items);
// for(var i=0;i<items.length;i++){
// items[i].onclick = function(){
// for(var j=0;j<items.length;j++){
// items[j].className = 'item';
// }
// this.className = 'item active';
// }
// }
</script>
</body>
- 操作行内样式
css("属性名","属性值") //设置行内样式
css(JavaScriptON对象) //设置一组CSS样式
/*
JavaScriptON对象:常用数据传输格式
语法 :
{
"width":"200px",
"height":"200px",
"color":"red"
}
*/
8)元素的创建,添加,删除
- 创建:使用$(“标签语法”),返回创建好的元素
var div = $("<div></div>"); //创建元素
div.html("动态创建").attr("id","d1").css("color","red"); //链式调用,设置内容和属性
var h1 = $("<h1 id='d1'>一级标题</h1>"); //创建的同时设置内容,属性和样式
- 作为子元素添加
$obj.append(newObj); //在$obj的末尾添加子元素newObj
$obj.prepend(newObj); //作为第一个子元素添加至$obj中
- 作为兄弟元素添加
$obj.after(newObj); //在$obj的后面添加兄弟元素
$obj.before(newObj); //在$obj的前面添加兄弟元素
- 移除元素
$obj.remove(); //移除$obj
<title>创建、添加、删除页面元素</title>
</head>
<body>
<hr>
<button id="add">创建并添加元素</button>
<script src="../js/jquery.min.js"></script>
<script>
// 删除hr
$('hr').remove();
$('#add').click(function(){
var html = $('<h1></h1>'); //接收的是字符串类型
html.html('使用JQ创建的对象').css('text-align','center');
// 作为body的子元素添加
// $('body').prepend(html);
// $('body').append(html); 最终只会添加一个,如果是新元素会不断添加
// 作为兄弟元素添加
// $('hr').before(html);
// $('hr').after(html);
})
</script>
</body>
9)动画效果
-
显示和隐藏
show(speed,callback)/hide(speed,callback)
- speed 可选。规定元素从隐藏到完全可见的速度。默认为 “0”。
- callback 可选。show 函数执行完之后,要执行的函数
-
通过使用滑动下拉和上推效果,显示隐藏的被选元素( 只针对块元素 )
slideDown(speed,callback)/slideUp(speed,callback)
-
通过使用淡隐淡现方式显示效果,显示隐藏的被选元素
fadeOut(speed,callback)/fadeIn(speed,callback)
-
动画函数,可以实现自定义动画 animate 函数
animate(styles,speed,callback)
-
styles 必需。规定产生动画效果的 CSS 样式和值
-
speed 可选。规定动画的速度。默认是 “normal”
-
callback 可选。show 函数执行完之后,要执行的函数
<title>动画</title> <style> button{ font-size: 25px; } </style> </head> <body> <div id="target"> <img src="../imgs/gm1-6.jpg" alt=""> </div> <button id="btn">隐藏</button> <button id="btn2">上推</button> <button id="btn3">淡隐</button> <script src="../js/jquery.min.js"></script> <script> // 16:50~17:05 // 当按钮为隐藏时 点击隐藏div后 将按钮改为显示 // 当按钮为显示时 点击显示div后 将按钮改为隐藏 $('#btn3').click(function(){ var text = $('#btn3').html(); if(text == '淡隐'){ $('#target').fadeOut(3000,function(){ $('#btn3').html('淡现'); }); }else{ $('#target').fadeIn(3000,function(){ $('#btn3').html('淡隐'); }); } }) $('#btn2').click(function(){ var text = $('#btn2').html(); if(text == '上推'){ $('#target').slideUp(3000,function(){ $('#btn2').html('下拉'); }); }else{ $('#target').slideDown(3000,function(){ $('#btn2').html('上推'); }); } }) $('#btn').click(function(){ var text = $('#btn').html(); if(text == '隐藏'){ $('#target').hide(3000,function(){ $('#btn').html('显示'); }); }else{ $('#target').show(3000,function(){ $('#btn').html('隐藏'); }); } }) </script>
<title>自定义动画</title> <style> #ball{ width: 200px; height: 200px; background-color: orangered; } </style> </head> <body> <div id="ball"></div> <script src="../js/jquery.min.js"></script> <script> $('#ball').animate({ "border-radius":"50%", "margin-left":"300px", },2000,function(){ // 再次设置一个自定义动画 $('#ball').animate({ "margin-left":"0", },2000,function(){ $('#ball').fadeOut(2000) }) }) </script>
-
10)数据与对象遍历
-
$(selector).each() 方法规定为每个匹配元素规定运行的函数
$(selector).each(function(index,element){})
必需。为每个匹配元素规定运行的函数。
- index - 选择器的 index 位置
- element - 当前的元素
-
$.each()函数是框架提供的一个工具类函数,通过它,你可以遍历对象、数组的属性值并进行处理
$.each(Object, function(index, data){});
必需。为每个匹配元素规定运行的函数。
-
index - 选择器的 index 位置
-
data- 当前的数据
<title>遍历操作</title> <script src="../js/jquery.min.js"></script> <script> $(function () { $('div').each(function (i, o) { // 遍历元素之后要做的事情 // 参数i,o是由each传递的 i表示当前的索引值 o表示当前的页面元素对象(原生JS对象) console.log(i, o); }); }) // 对数据的处理 var arr = ['北京', '上海', '深圳', '沈阳']; // for(var i=0;i<arr.length;i++){} // for(var i in arr){} $.each(arr, function (i, e) { console.log(i, e); }) </script> </head> <body> <div>div1</div> <div>div2</div> <div>div3</div> <div>div4</div> <script> // window.onload = function(){ // console.log('hhhh') // } $(function(){ console.log('这是第二个$function') }) </script> </body>
-
11)jQuery事件处理
- 文档加载完毕
原生JavaScript 方法:window.onload
jQuery:
//语法一
$(document).ready(function (){
//文档加载完毕后执行
})
//语法二
$().ready(function (){
//文档加载完毕后执行
})
//语法三
$(function(){
//文档加载完毕后执行
})
区别:
原生onload事件不能重复书写,会产生覆盖问题;jquery中对事件做了优化,可以重复书写ready方法,依次执行
- 事件绑定方式
事件名称省略 on 前缀
//on("事件名称",function)
$("div").on("click",function(){});//新版本使用的多些
//bind("事件名称",function)
$("div").bind("click",function(){});//1.6-1.8间的版本
//事件名作为方法名
$("div").click(function(){});
- this表示事件的触发对象,在jquery中可以使用,注意转换类型。this为原生对象只能使用原生的属性和方法,可以使用$(this)转换为jquery对象,使用jquery方法。
3.实战
1. 页面效果
2. 代码分析
1. 页面元素
2. 初始代码
3. 绑定省份
4. 绑定城市