- jQuery框架
jQuery框架
概念:jQuery是继prototype之后一个优秀的开源的JavaScript代码库(或JavaScript框架),它封装JavaScript常用的功能代码。
特点:
(1) 具有独特的链式语法,可以把多个操作写在一行代码里,更加简洁
(2) 拥有大量的选择器,不仅有高效灵活的css选择器【id,类,元素】,并且可对CSS选择器进行扩展
(3) 拥有便捷的插件扩展机制和丰富的插件(树形菜单、日期控件、图片切换插件、弹出窗口等)
(4) jQuery兼容各种主流浏览器,兼容性更强
(5) 很多API都方法化了
jQuery的核心思想:(write less,do more)写得更少,做得更多
基础语法:$(selector).action()
jQuery 语法是通过选取 HTML 元素,并对选取的元素执行某些操作。
- 美元符号定义 jQuery
- 选择符(selector)"查询"和"查找" HTML 元素
- jQuery 的 action() 执行对元素的操作
一、与JS比较
js
<script>
//js中的页面加载事件:当整个页面加载完成(节点,样式,图片等)之后才会执行里面的代码
window.onload = function(){
alert(111);
}
window.onload = function(){
alert(222);
}
//jQuery页面加载事件:加载时机是节点加载完成就执行了
$().ready(function(){
alert(333);
})
jQuery(function(){
alert(444);
});
//执行顺序 333 - 444 - 222
/*
1.jQuery页面加载事件一定都会执行,而js中的页面加载事件只会执行最后一个
2.jQuery页面加载事件优先执行 (这个需要看版本)
*/
/*
以后页面中会引入多个前端框架:如果有2个前端框架都定义了$。
你再页面中用$符号是哪一个框架的
*/
</script>
二、jQuery版本介绍
jQuery是一个js框架,代码本质上就是js代码,使用时需要引入jQuery.js 注意需要先导包 !!!
js
// 引人jQuery:使用script标签
<script type="text/javascript" src="/js/jquery-1.11.2.min.js"></script>
三、 jQuery编程步骤
- 引入jQuery
js
// 引人jQuery:使用script标签
<script type="text/javascript" src="/js/jquery-1.11.2.min.js"></script>
- 编写jQuery入口函数即页面加载事件
js
$(function(){}) // 多个$(function(){})中的代码都会执行,多个window.onload只会执行最后一个
- 使用选择器定位到需要操作的节点
js
var $obj = $("body"); // 一般情况下为了避免dom对象与jquery对象混淆,可以将jquery对象的变量名用加上$前缀 即$obj
注:$()即$函数,body:选择器(元素选择器)
- 调用jQuery的API进行后续操作
四、DOM对象与jQuery对象转换
- DOM对象
getElementById()
getElementsByName()
getElementsByTagName()
window对象,document对象
parentNode获取的对象
即我们用传统的方法(javascript)获得的节点对象
- jQeury对象
通过选择器和$函数获取的节点对象。实质就是通过jQuery包装DOM对象后产生的对象
- 将Dom对象转换成jquery对象
js
$(dom对象)
例如:var $obj = $(obj);
//------------------------------------------------------------
<div id="d1">易烊千玺</div>
var div1 = document.getElementById("d1"); //jQuery对象相当于对dom对象的封装,可以看成将dom对象的数组
//dom对象 转换成 jQuery对象
var $div2 = $(div1); // $(dom对象)
$div2.css("color","red"); // 调用jQuery方法设置样式
- 将jQuery对象转换成dom对象:
js
var obj = $obj.get(0);
var obj = $obj[0,1,2...];
//------------------------------------------------------------
var $div = $("div"); // 获取jQuery对象
//jQuery对象 转换成 dom对象
var div1 = $div[0] // 或者使用 $div.get(0)来获取对象
div1.style.backgroundColor = "pink"; // 此时div1是通过下标获取到的,jQuery对象将dom对象放进了一个数组里面
注:dom对象与jQuery对象的方法和属性不能混淆,jQuery对象不能调用dom对象的属性和方法
五、jQuery选择器
- 基本选择器
Id选择器: id="d1" 调用方法 #d1
类/class选择器: class="c1" 调用方法.c1
元素选择器: p 调用方法 p
- 基本过滤选择器
:first - 第一个
:last - 最后一个
:eq(index) - 指定索引的
js$("li:first").css("color","red"); // 第一个li $("li:last").css("color","lime"); $("li:eq(1)").css("color","gray"); // 索引为1的li
- 属性选择器
[属性名] - 有指定属性的
[属性名="属性值"] - 有指定属性和属性值的
Js$("li[id]").css("color","yellow"); // 设置li标签下属性名为id的对象 $("li[id='d2']").css("color","blue"); // 设置li标签下属性名为id=d2的对象
- 层次选择器
ul li
选择<ul>
里面的所有<li>
元素;div > p
选择所有直接子元素是<div>
的<p>
元素;h1 + p
选择紧跟在<h1>
元素后紧挨着的<p>
元素; 就是跟h1同级的第一个标签
六、jQuery事件绑定/注册
- Js事件绑定/注册
- 直接绑定到元素中
js
<a href="javascript:void(0);" onclick="functionName();"/> // 点击后执行functionName()
- dom对象.事件
js
document.getElementById("id").onclick=function(){ //点击后执行function中的方法
//逻辑代码
}
- jQuery事件绑定/注册
- 绑定事件
js
$obj.事件名称(function(){ //obj就是可能是任意对象 一般都是通过选择器来找到需要绑定事件的元素
//逻辑代码
});
$obj.on("事件名称", function(){
//逻辑代码
});
$obj.bind("事件名称", function(){
//逻辑代码
});
- 取消事件
js
$obj.off("事件名称"); // 通常用于移除通过 on() 方法添加的事件处理程序。
$obj.unbind("事件名称"); // 移除被选元素的事件处理程序 当事件发生时终止指定函数的运行。
注意:如果取消事件时不写时间名称,表示取消所有事件
七、jQuery的DOM操作
- 文本操作
1.1 API
html(): 设置或者获取双标签中的的html文本
text():设置或者获取双标签中的纯文本
val():设置和获取有value属性的标签的value属性值
有value属性值的元素【大多数单标签都有】:input【按钮,文本框等】、select中option等
没有value属性值的元素【大多数双标签没有】:div、hn、span、a、p等
js
// 需求:当鼠标进入div显示红色的"有敌军潜入",鼠标移开div还原
<div style="height: 150px;width: 150px;background-color: green" id="d1"></div>
<script type="text/javascript" src="/jquery-1.11.2.min.js"></script>
<script type="text/javascript">
$(function(){
$("#d1").mouseover(function(){
$(this).html("<span style='color:red'>有敌军潜入</span>");
});
$("#d1").mouseout(function(){
$(this).text("");
});
});
</script>
- 属性和样式操作
2.1 API
操作样式:css(),addClass(),removeClass()
js.css() // 直接设置样式 .css("width",200).css("height",300) .addClass() // 向第一个 <p> 元素添加一个类名 这样就方便在head里面设置样式,然后通过类名设置样式,这样可以解决.多个css,防止记不住属性名 $("button").click(function(){ $("p:first").addClass("intro"); }); .removeClass() // 从所有的 <p> 元素移除 "intro" 类: $("button").click(function(){ $("p").removeClass("intro"); });
操作属性:
attr():操作【设置或获取】非boolean属性值的属性
prop():操作【设置或获取】boolean属性值的属性(checked单选框复选框,selected下拉框)
data():h5出的API,可以自定义属性data-属性名="属性值",然后用data("属性名")获取可以自动转换。一般用于传递数据
注意:要自动转换的话属性值必须是标准格式就是双引号,不能使用单引号
removeAttr():移除指定属性值
js
// 需求:鼠标移动到元素上改变背景颜色,点击改变属性和样式
<a href="javascript:;">File</a>
<a href="javascript:;">Edit</a>
<script type="text/javascript" src="/jquery-1.11.2.min.js"></script>
<script type="text/javascript">
$(function(){
var $as = $("a");//jQuery对象
for(var i = 0 ; i < $as.length ; i++){
var a = $as[i];//dom对象
//$(a) 将dom对象转换成jQuery对象,才能使用方法
$(a).mouseover(function(){
$(this).css('backgroundColor','skyblue');
});
$(a).mouseout(function(){
$(this).css('backgroundColor','white');
});
$(a).click(function(){
alert("当前元素的跳转地址为:" + $(this).attr('href'));
$(this).addClass('c1');
});
}
});
</script>
2.2 data()与其他API区别
概念:自定义数据属性,也就是data-自定义属性。
注意事项:
(1) 使用data获取属性值 有个前提,属性名必须是data-xxx。使用data()获取属性 的语法格式:jQuery对象.data("xxx")
(2) 使用attr()获取属性的语法格式:jquery对象.attr("属性名")
js
<input type="text" id="d1"
data-person='{"id":1,"name":"tom","address":"四川成都"}' // 自动将json格式的字符串转换成json对象
data-name="赵子龙"
data-age="22"
data-sex="true" />
<script type="text/javascript">
$(function(){
console.log($('#d1').attr('data-person'));//获取出来都是字符串
console.log($('#d1').attr('data-name'));//获取出来都是字符串
console.log($('#d1').attr('data-age'));//获取出来都是字符串
console.log($('#d1').attr('data-sex'));//获取出来都是字符串
console.log("====================================");
//获取出来出来的值,会自动转换成相应的类型。能转就转,不能转就以字符串的形式存在
console.log($('#d1').data('person'));
console.log($('#d1').data('name'));
console.log($('#d1').data('age'));
console.log($('#d1').data('sex'));
});
</script>
- 元素操作
3.3 API
追加:append()
删除:remove(),删除会将当前元素和里面的所有内容删除掉
清空:empty(),清空会保留当前元素
JSON
概念:JSON 是用于存储和传输数据的格式。 通常用于服务端向网页传递数据 。
- JSON 是一种轻量级的数据交换格式。
- JSON是独立的语言。
- JSON 易于理解。
JS
// json对象
var obj1 = {"id":1,"name":"jack","age":20}
//alert(obj1.name);
var obj2 = {"id":1,"name":"jack","address":{"street":"陕西街","no":"125号"}}
// alert(obj2.address.street);
var obj3 = [{"id":1,"name":"jack","age":20},{"id":2,"name":"tom","age":30}]
//alert(obj3[1].name);
//json格式的字符串
var str = ' {"id":1,"name":"jack","age":20}';
//转json对象:要求必须是标准格式 - 也就是外面是单引号,里面属性是双引号,数字不用
alert(JSON.parse(str).name);
//data-*是html5出来的属性,为了传递数据 - 自动将json格式的字符串转成json对象
//1.申明的时候必须用data-* 2.获取的时候:data(*)
console.log($("div").data("obj"));
八、 jQuery遍历
场景:例如有多个input按钮,获取每个按钮的value值
第一种:传统的遍历方式
Js
var $obj = $("input:button");
for(var i = 0 ; i < $obj.length ; i++){
alert($($obj[i]).val());//注意$obj[i]是一个dom对象
}
第二种:jQuery提供的each函数
js
//$obj:jquery集合对象,index遍历元素的下标(从0开始),obj表示每一个节点
$obj.each(function(this){ // this表示每个对象
alert($(this).val());
});
九、 jQuery发异步请求
方法1:
js
<input type="button" value="添加数据"/>
$(function(){
$("input").click(function(){
$.get("url",data,callback,type);
$.get(
"https://www.fastmock.site/mock/d2846dc5a7b17c3f5711971f6ccd25ce/jquery/user/add",
{"name":'tom'},
function(data){
console.log(data);
},
"json"
)
方法2:
js
$(function(){
$("input").click(function(){
$.ajax({
url: "https://www.fastmock.site/mock/d2846dc5a7b17c3f5711971f6ccd25ce/jquery/user/add", //请求地址
type: "GET", //请求方式
data: "eid=1&ename=tom", //请求参数:格式1:key=value 格式2:json格式
success: function (result) { //请求成功后的回调函数,result是服务器返回的数据
console.log(result);
},
dataType: "json" //如果是json,服务器返回值就是json对象,直接使用
//如果不指定dataType,就是普通文本
});
})
});