jQuery
jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。
jQuery的核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口;具有高效灵活的css选择器,并且可对CSS选择器进行扩展,拥有便捷的插件扩展机制和丰富的插件,jQuery兼容各种主流浏览器。
jQuery使用
引入jQuery开始使用
<script src = 'jquery-1.10.1.min.js'></script>
jQuery查找元素节点
$(字符串)
参数:必须css选择器形式的字符串。
JQuery_选择网页元素
1.模拟css选择元素
2.参考css选择器的参考手册
案例
<div id = 'div1'>div</div>
<ul>
<li>1111</li>
<li class = 'box'>1111</li>
<li name = 'hello'>1111</li>
<li class = 'box'>1111</li>
<li>1111</li>
</ul>
<ol>
<li class = 'box'>2222</li>
<li name = 'hello'>2222</li>
<li>2222</li>
<li class = 'box'>2222</li>
</ol>
<input type="text" name = 'hello'>
window.onload = function(){
//id = 'div1'
$("#div1").css("backgroundColor", 'red');
//class = .box
$(".box").css("backgroundColor", 'blue');
// 使用class选择器的写法 可以直接通过. 也可以根据需求添加条件
$("ol .box").css("backgroundColor", 'blue');
//tagName = li
$("ul li").css("backgroundColor", 'orange');
//name = hello
$("[name=hello]").css("backgroundColor", 'green');
//第一个li标签变成粉色
$("li:first").css("backgroundColor", 'pink');
//最后一个
$("li:last").css("backgroundColor", 'pink');
//奇数位
$("li:odd").css("backgroundColor", 'pink');
$("li:even").css("backgroundColor", 'pink');
//指定某一个li节点
$("li:eq(2)").css("backgroundColor", 'pink');
$("li").eq(4).css("backgroundColor","red");
// 指定class为box的,其他的过滤
$("li").filter(".box").css("backgroundColor","blue");
$("li.box").css("backgroundColor", 'blue');
}
jQuery写法__方法函数化
JQuery的写法特点
1.方法函数化 (基本上在JQ,基本不用=号,我们都通过函数调用的方式完成一些操作)
2.链式操作
3.取值赋值一体化
普通写法
window.onload = function(){
}
jQuery写法
$(function(){
})
案例
当鼠标移入的时候变成黑色 移出时变成蓝色 点击时变成红色
<div id = 'div1'>div</div>
<ul>
<li>1111</li>
<li class = 'box'>1111</li>
<li name = 'hello'>1111</li>
<li class = 'box'>1111</li>
<li>1111</li>
</ul>
<ol>
<li class = 'box'>2222</li>
<li name = 'hello'>2222</li>
<li>2222</li>
<li class = 'box'>2222</li>
</ol>
<input type="text" name = 'hello'>
$(function(){
// alert(2);
//给页面上所有的li节点添加点击事件
$("li").click(function(){
this.style.backgroundColor = 'red';
})
//给他添加移入移出
$("li").mouseover(function(){
this.style.backgroundColor = 'black';
})
$("li").mouseout(function(){
this.style.backgroundColor = 'blue';
})
});
链式操作写法
$(function(){
$("li").click(function(){
this.style.backgroundColor = 'red';
}).mouseover(function(){
this.style.backgroundColor = 'black';
}).mouseout(function(){
this.style.backgroundColor = 'blue';
}).css("backgroundColor","pink");
})
取值赋值一体化
$(function(){
// alert($("#div1").css("width"));
// $("#div1").css("width","300px");
// $("#div1").css("width","300");
// 同时设置多个css样式
$("#div1").css({
width:300,
height:500,
"backgroundColor":'orange'
})
// 取值
alert($("#div1").html());
//赋值
$("#div1").html("wdnmd")
//获取输入框的值value
// 取值
alert($("input").val());
//赋值
$("input").val("wdnmd");
})
jQuery和JavaScript的关系
JQuery_选择网页元素
1、模拟css选择元素
参考css选择器的参考手册
2、独有的表达式
3、支持多种筛选方式
JQuery的写法特点
1、方法函数化 (基本上在JQ,基本不用=号,我们都通过函数调用的方式完成一些操作)
2、链式操作
3、取值赋值一体化
JQ和JS的关系
【注】JQ是通过JS封装的,
【注】JQ中$()调用返回的是一个JQ构造函数生成的对象。JQ对象后面只能跟JQ自己的方法。
【结论】:JQ和JS可以共存,但是不能混用。
案例
$(function(){
var res = $("#div1");
// alert(res); //object Object
// res.css("backgroundColor", 'red');
// res.style.backgroundColor = 'orange'; //JQ对象后面跟JS操作,失效
var node = document.getElementById("div1");
// alert(node); //object HTMLDivElement
alert(node.html()); //JS对象后面跟JQ的操作,失效
})
Not/Has/filter
filter 过滤
not filter的反义词
has 拥有
<div id='div1' class='box'>div1文本</div>
<div id='div2'><span class='box'>div2文本</span></div>
$(function(){
// $("div").filter(".box").css("backgroundColor","red");
// $("div").not(".box").css("backgroundColor","blue");
$("div").has(".box").css("backgroundColor",'red');
})
Next/Prev/Find
prev 找到当前节点兄弟节点中的上一个节点
next 找到当前节点兄弟节点中的下一个节点
find() 查找子节点
<div id = 'div1' class = 'box'>div1文本</div>
<div id = 'div2'><span class = 'box'>div2文本</span></div>
<div id = 'div3'>div3文本</div>
$(function(){
$("#div2").prev().css("backgroundColor","red");
$("#div2").next().css("backgroundColor",'blue');
//查找div节点中,class=box的子节点
$("div").find(".box").css("backgroundColor",'green');
})
eq/Index
eq(下标) 通过下标获取想要的元素
index() 返回当前这个节点,在【兄弟节点】中的下标
<div id='div2'><span class='box'>div2文本</span></div>
<div id='div3'>div3文本</div>
<div id='div1' class='box'>div1文本</div>
<div>
<div id='div4' class='box'>div1文本</div>
</div>
$(function(){
$("div").eq(1).css("backgroundColor","red");
$("div:eq(2)").css("backgroundColor","orange");
alert($("#div1").index());
})
attr / Css
设置的时候,是对选中的所有元素节点进行设置
获取的时候,只获取第一个符合条件的节点。
<div title='hello' name='world' class='box1'>div1文本</div>
<div title='hello' name='world' class='box2'>div2文本</div>
<div title='hello' name='world' class='box3'>div3文本</div>
<div title='hello' name='world' class='box4'>div4文本</div>
<div title='hello' name='world' class='box5'>div5文本</div>
$(function () {
//修改css样式
// $("div").css("height", "200px");
//修改多个样式
// $("div").css({
// width: 100,
// height: 300,
// backgroundColor: "pink"
// })
//获取css样式
// alert($("div").css("height")); //100px
//行间属性进行处理 attr
alert($("div").attr("class")); //box1
// $("div").attr("title", "xxx");
//设置多个行间样式
$("div").attr({
title: "xxx",
name: 'yyy',
class: 'box'
})
})
addClass / removeClass
addClass 新增class
removeClass 删除class
<div id = 'div1' class = 'box1 box2'>sss</div>
$(function(){
$('#div1').addClass("box3 box4 box2");
$("#div1").removeClass("box3 box4");
})
Width / Height相关的方法
获取宽的方法
width()
innerWidth()
outerWidth();
outerWidth(true);
获取高的方法
height();
innerHeight();
outerHeight();
outerHeight(true)
<div id='div1'></div>
<button>获取css样式</button>
$(function () {
$("button").click(function () {
//普通获取css样式
// alert($("#div1").css("width")); //100px
//width
alert("width: " + $("#div1").width());
//width + padding
alert("innerWidth: " + $("#div1").innerWidth());
//width + border + padding
alert("outerWidth: " + $("#div1").outerWidth());
//width + border + padding + margin
alert("outerWidth: " + $("#div1").outerWidth(true));
})
})
节点操作
节点操作:
• insertBefore() before()
• insertAfter() after()
• appendTo() append()
• prependTo() prepend()
• remove()
<div>div文本<em>em文本</em><strong>strong文本</strong></div>
<span>span文本</span>
$(function(){
//找到span节点,插入到div节点的前面
// $("span").insertBefore($("div")).css("backgroundColor", 'red');
//div前面是span
$("div").before($("span")).css("backgroundColor", 'blue');
//找到div节点,插入span节点的后面
// $("div").insertAfter($("span"));
//找到span节点,插入到div节点的子节点末尾
// $("span").appendTo($("div"));
//找到span节点,插入div节点的子节点的首位
// $("span").prependTo($("div"));
//找到节点,删除这个节点
// $("div").remove();
})
On / Off
on 绑定事件
off 取消事件绑定
【注】在JQ所有的事件绑定的方法,底层都是通过事件监听器封装。
<button>取消事件绑定</button>
<div></div>
<div></div>
<div></div>
<ul>
<li>111</li>
<li class = 'box'>111</li>
<li class = 'box'>111</li>
<li>111</li>
<li>111</li>
</ul>
$(function(){
//原来div添加点击
/*
$("div").click(function(){
alert("点击1");
})
$("div").click(function(){
alert("点击2");
})
*/
//1、给单个事件,添加事件绑定
// $("div").on("click", function(){
// alert("单击1");
// })
//2、给多个事件,添加同一个事件绑定函数
// var i = 0;
// $("div").on("click mouseover", function(){
// $(this).html(i++);
// })
function show(){
alert("hello world");
}
$("div").click(show);
//3、给不同的事件,添加不同的函数
$("div").on({
click: function(){
alert("单击");
},
mouseover: function(){
$(this).css("backgroundColor", 'red');
},
mouseout: function(){
$(this).css("backgroundColor", 'blue');
}
})
//4、添加事件委托 第二参数,触发对象的选择
/*
$("ul").on("click", "li.box", function(){
//this指向就是当前的触发对象
$(this).css("backgroundColor", 'red');
})
*/
$("button").click(function(){
//取消事件绑定
//1、取消所有事件
// $("div").off();
//2、取消某一个事件类型上的函数
// $("div").off("click");
//3、取消某一个事件类型上的某一个函数(一定要有函数名)
$("div").off("click", show);
})
})
scrollTop
获取当前页面的滚动高度
<body style = 'height: 3000px'>
</body>
$(function(){
$(document).click(function(){
alert($(window).scrollTop());
})
})
案例
实现一个可关闭的弹窗,并且根据窗口自适应居中(随窗口变动而变化位置,始终居中)
<body style='height: 3000px'>
<button id='btn1'>显示弹窗</button>
<div id='msg'>
<input type="text" placeholder="用户名">
<br>
<input type="text" placeholder="密码">
<div id='close'>X</div>
</div>
</body>
* {
margin: 0px;
padding: 0px;
}
#msg {
width: 300px;
height: 300px;
border: 1px solid black;
position: absolute;
display: none;
}
#close {
position: absolute;
right: 0px;
top: 0px;
}
$(function () {
$("#btn1").click(function () {
var l = ($(window).outerWidth() - $("#msg").outerWidth()) / 2;
var t = ($(window).outerHeight() - $("#msg").outerHeight()) / 2 + $(window).scrollTop();
$("#msg").css({
display: "block",
left: l,
top: t
});
})
$(window).on("resize scroll", function () {
var l = ($(window).outerWidth() - $("#msg").outerWidth()) / 2;
var t = ($(window).outerHeight() - $("#msg").outerHeight()) / 2;
$("#msg").css({
left: l,
top: t
})
})
$("#close").click(function () {
$("#msg").css("display", 'none');
})
})
Event
ev JQ兼容后的事件对象
获取鼠标坐标
ev.pageX ev.pageY 原点:整个文档的左上角,包含滚动高度的
ev.clientX ev.clientY 原点:可视窗口的左上角为原点
ev.screenX ev.screenY 原点:电脑屏幕的左上角
ev.which
1、如果是在鼠标事件下 代表button
- 左键
- 滚轮
- 右键
2、如果keydown 代表是键码(不区分大小写)
3、如果keypress 代表字符码(区分大小写)
e.target JQ兼容后的触发对象
案例
<h1>hello world</h1>
<h1>hello world</h1>
$(function(){
$(document).mousedown(function(ev){
// alert(ev.clientX + ", " + ev.clientY);
// alert(ev.pageX + ", " + ev.pageY);
// alert(ev.which);
alert(ev.target.nodeName)
})
// $(window).keydown(function(ev){
// alert(ev.which);
// })
// $(window).keypress(function(ev){
// alert(ev.which);
// })
})
阻止冒泡和默认行为
preventDefault 阻止默认行为
stopPropagation 阻止事件冒泡
<div id = 'div1'>
<div id = 'div2'>
<div id = 'div3'>
<a href="https://www.baidu.com">百度</a>
</div>
</div>
</div>
$(function(){
$("div").click(function(ev){
alert(this.id);
// ev.stopPropagation();
return false;
})
//阻止a标签的默认行为
// $("a").click(function(ev){
// ev.preventDefault();
// ev.stopPropagation();
// })
$("a").click(function(ev){
return false; //既可以阻止默认行为,又可以阻止事件冒泡。
})
})
Offset / Position / OffsetParent
offset 直接距离最左边和最上边的坐标
offset().left
offset().top
position 什么都算,计算距离第一个有定位的父节点的距离
position().left
position().top
offsetParent()
找第一个有定位的父节点,如果没有会往上层去找,直到找到html节点为止。
<div id = 'div1'>
<div id = 'div2'></div>
</div>
$(function(){
$(document).click(function(){
alert($("#div2").offset().left)
alert($("#div2").offset().top);
alert($("#div2").position().left);
})
})
$(function(){
$(document).click(function(){
// $("#div2").parent().css("backgroundColor", 'black'); //找到父节点
// $("#div2").parents("div").css("backgroundColor", 'black'); //找到所有祖先节点
$("#div2").offsetParent().css("backgroundColor", 'black');
})
})
Each / Size / Val
val 表单元素的value值
size() JQ,获取选择器获取到的元素节点的个数
each 只能被JQ对象调用,进行对于我们获取到的元素遍历
<ul>
<li>111</li>
<li>111</li>
<li>111</li>
<li>111</li>
<li>111</li>
</ul>
<input type="text" value = '123'>
<input type="text" value = '456'>
<input type="text" value = '789'>
$(function(){
// alert($("input").val());
// $("input").val("hello world");
// alert($("ul li").size());
$("ul li").each(function(index, item){
//item JS对象 index 当前遍历到的元素的下标
// item.innerHTML = index;
$(item).html(index);
})
})
逆战班
如果对想对jQuery,以及更多关于前端知识,有更多了解的话
请移步码农雨飞b站入口