jQuery
jQuery
一、概述
1. 介绍
官方网址:jquery官网跳转
中文API:jquery123.com
jQuery是一个JS的工具库,对原生的JS中的方法进行封装,可以实现更简单的操作
2. 使用
(1) 引入jQuery文件
(2) 核心对象:jQuery对象(使用$表示)
(3) 工厂函数
即$()
函数
$()
:用于获取元素,创建节点,原生对象转JQ对象等
例如:使用$("选择器")
获取元素
window.onload = function (){
// 此时使用的jQuery的$(),根据标签选择器获取元素
console.log($("h1"));
// 原生对象使用原生属性和方法;jQuery对象使用jQuery的属性和方法,不能混用
$("h1").html("哈哈");
// jquery 转 原生
// 法一、从jquery对象中通过下标取元素,返回原生对象
$("h1")[0].innerHTML = "jq-->原生";
// 法二、jquery对象调用get(index),返回原生对象
$("h1").get(1).innerHTML = "get()转原生";
// 原生转jquery对象,使用$()封装
var h1 = document.getElementsByTagName("h1")[0];
$(h1);
};
3.获取元素
$("selector")
根据选择器获取元素
选择器分类
3.1.1 基础选择器
标签、id、class、群组
例如:$("h1")
、$("#box")
、$(".c1")
、$("body,h1")
window.onload = function (){
$("h1").html("标签选择器"); // 标签选择器
$("#d1").html("ID选择器"); // ID选择器
$(".c1").html("类选择器"); // 类选择器
// 内部提供修改css样式的方法
$("#d1").css("color","red");
$(".c1").css("background","green");
$("#d1,.c1").css("text-align","center").css("font-size","100px"); // 链式调用,可以添加多个css或者html
};
3.1.2 层级选择器
(1) 后代选择器$("#box span")
(2) 子代选择器$("#box>span")
(3) 相邻兄弟选择器$("h1+p")
向后查找相邻的一个兄弟元素,同时必须满足指定的选择器,
$("h1+p")
表示获取h1后边的相邻兄弟p元素
(4) 通用兄弟选择器$("h1~p")
向后查找所有满足选择器的兄弟元素
3.1.3 过滤选择器
需要与基础选择器结合使用
(1) 匹配第一个
:first
(2) 匹配最后一个
:last
(3) 匹配偶数
匹配偶数下标对应的元素
:even
(4) 匹配奇数
匹配奇数下标对应的元素
:odd
(5) 匹配下标
匹配对应下标的元素
:eq(index)
(6) 匹配下标(大于)
匹配大于指定下标的元素
:gt(index)
(7) 匹配下标(小于)
匹配小于指定下标的元素
:lt(index)
(8) 否定筛选
:not(selector)
<p>段落标签</p>
<p>段落标签</p>
<p>段落标签</p>
<p>段落标签</p>
<p>段落标签</p>
<p>段落标签</p>
<p>段落标签</p>
<p>段落标签</p>
<button onclick="first()">:first</button>
<button onclick="last()">:last</button>
<button onclick="even()">:even</button>
<button onclick="odd()">:odd</button>
<button onclick="gt()">:gt</button>
<button onclick="eq()">:eq</button>
<button onclick="lt()">:lt</button>
<button onclick="not()">:not</button>
<script>
function first(){
$("p:first").css("background","red");
};
function last(){
$("p:last").css("background","green");
};
function even(){
$("p:even").html("偶数下标").css("text-algin","center");
};
function odd(){
$("p:odd").html("奇数下标").css("text-algin","center");
};
function eq(){
$("p:eq(5)").css("color","red");
};
function gt(){
$("p:gt(5)").css("color","blue");
};
function lt(){
$("p:lt(5)").css("color","orange");
};
function not(){
$("p:not(:eq(5))").css("color","black");
};
</script>
3.1.4 属性选择器
根据标签属性匹配元素
(1) 包含属性
匹配包含指定属性名的元素
[attrName]
(2) 指定属性
匹配属性名等于属性值的元素
[attrName=value]/[attrName="value"]
(3) 模糊匹配
[attrName^=value]
匹配属性值以指定的value开头的元素
[attrName$=value]
匹配属性值以指定的value结尾的元素
[attrName*=value]
匹配属性值中包含value的元素
<h1 class="c1">标题</h1>
<h1>标题</h1>
<h1 class="dc1">标题</h1>
<h1>标题</h1>
<h1>标题</h1>
<h1>标题</h1>
<h1>标题</h1>
<h1>标题</h1>
<script>
console.log($("[class]"));
console.log($("[class=c1]"));
console.log($("[class^=c]")); // 类名以c开头
console.log($("[class$=1]")); // 类名以1结尾
console.log($("[class*=c]")); // 类名包含c
</script>
3.1.5 子元素过滤选择器
:first-child
匹配第一个子元素
:last-child
匹配最后一个子元素
:nth-child
匹配第n个子元素
<ul>
<li>无序列表项</li>
<li>无序列表项</li>
<li>无序列表项</li>
<li>无序列表项</li>
<li>无序列表项</li>
</ul>
<ol>
<li>有序列表</li>
<li>有序列表</li>
<li>有序列表</li>
<li>有序列表</li>
<li>有序列表</li>
<li>有序列表</li>
</ol>
<script>
$("li:first").css("color","red"); // 匹配元素列表中第一个
$("li:first-child").css("background","orange"); // 匹配元素列表中作为第一个子元素存在的li
$("li:last").css("color","green");// 匹配元素列表中最后一个
$("li:last-child").css("background","cyan"); // 匹配元素列表中作为最后一个子元素存在的li
$("li:nth-child(3)").css("text-align","center"); // 匹配元素列表中第三个子元素li
</script>
二、DOM操作
使用jquery操作DOM元素
1. 获取元素
$("选择器")
获取元素:包括基础选择器、层级选择器和过滤选择器
2. 操作元素内容
2.1 html()
读取设置元素的内容,可以识别标签语法
给参数表示设置,不给参数表示读取。
修改的时候会遍历整个列表,修改每一个元素的内容
<h1>标题</h1>
<h1>标题</h1>
<h1>标题</h1>
<h1>标题</h1>
<script>
$("h1").html("<a href='https://www.cnblogs.com/chancey/'>素心</a>");
$("h1").eq(0).html("<a href='https://www.cnblogs.com/chancey/'>素心(动态修改)</a>");
console.log($("h1").html()); // 只能取到第一个元素
</script>
2.2 text()
读取或者设置元素的内容,不能识别标签语法
2.3 val()
读取或设置表单控件的值
<style>
div{
width: 300px;
height: 200px;
background: palegreen;
margin-top: 30px;
text-align: center;
line-height: 200px;
color: blueviolet;
}
</style>
<h3>欢迎进入测试系统</h3>
<input type="text" placeholder="请输入">
<button onclick="show()">提交</button>
<div></div>
<script>
function show(){
// console.log($("input").html());
$("div").html('<h1>'+$("input").val()+'</h1>');
};
</script>
3. 操作元素属性
3.1 设置属性
attr("attrName","value")
读取或设置标签属性
prop("attrName","value")
读取或设置标签属性
两者没有太大的区别,如果属性用于表示元素的状态(按钮的选中或取消选中),只能使用prop()
设置
<!-- 只展示body中的内容 -->
<h1>标题</h1>
<p>段落</p>
<input type="checkbox" checked>
<!-- checked等同于checked = checked -->
<script>
$("h1").attr("id","d1");
$("p").attr("id","d2").prop("class","c1");
console.log($("h1").attr("id"),$("p").prop("class")); //取属性值
// 获取按钮的选中状态
console.log("attr:"+$("input").attr("checked"));
console.log("attr:"+$("input").prop("checked"));
3.2 删除属性
removeAttr("attrName")
移除指定的属性
4. 操作元素样式
(1) 操作id/class属性,对应选择器样式
(2) 直接添加或修改类名,针对类选择器样式
addClass("class属性值")
增加属性
removeClass("class属性值")
删除属性
toggleClass("class属性值")
有则删除,无则添加(由事件触发,动态切换类名)
(3) 操作行内样式
css("attrName","value")
传入CSS的属性名和属性值
css({JSON对象})
传入JSON对象统一设置样式
JSON格式
{ "color":"red", "text-agign":"center" }
<style>
#d1{
color: red;
}
.c1{
background: green;
}
.c2{
text-align: center;
}
</style>
<body>
<h1>标题</h1>
<p>动态操作类名</p>
<div>行内样式</div>
<button onclick="toggle()">点击切换</button>
<script>
// 1.操作id/class属性对应选择器样式
$("h1").attr("id","d1").prop("class","c1").prop("class","c1 c2");
// 2.动态操作类名
$("h1").addClass("c1").addClass("c2");
$("h1").removeClass("c1").removeAttr("id");
// 事件触发
function toggle(){
$("h1").toggleClass("c1");
};
// 3.操作行内样式
$("div").css({
"width":"200px",
"height":"200px",
"background":"red"
}).css("width","500px")
</script>
</body>
5. 层次方法
根据层级结构取元素
5.1 父元素
parent()
获取唯一的父元素
5.2 祖先元素
parents("selector")
获取满足选择器的祖先元素
5.3 子元素
children()/children("selector")
获取子元素数组/满足选择器
5.4 子元素(所有)
find("selector")
获取所有满足条件的子元素
5.5 相邻元素
next()/next("selector")
获取下一个兄弟元素/获取下一个满足条件的兄弟元素
prev()/prev("selector")
获取上一个兄弟元素/获取上一个满足条件的兄弟元素
siblings()/siblings("selector")
<body>
<div id="box">
<div class="c1">
<h1>标题</h1>
<h2>标题</h2>
</div>
<h2>示例</h2>
<p>段落</p>
</div>
<script>
console.log($("h1").parent());
console.log($("h1").parents()); // 如果省略参数,则会获取所有祖先元素
console.log($("h1").parents("#box")); // 有参数则指定获取
console.log($("#box").children()); // 获取直接子元素数组
console.log($("#box").children("h2")); // 获取指定的子元素(只获取直接子元素)
console.log($("#box").find("h2")); // 匹配所有满足条件的子元素
console.log($(".c1").next()); // 获取下一个相邻元素
console.log($(".c1").next("p")); // 获取下一个满足条件的相邻元素
console.log($(".c1").prev("p")); // 获取上一个满足条件的相邻元素
console.log($("p").siblings());
</script>
</body>
6. 元素的编辑
6.1 创建
语法:$("标签语法")
例如:$("<h1>标题</h1>")
6.2 添加
(1) 作为子元素添加
$parent.append($obj)
作为最后一个元素添加
$parent.prepend($obj)
作为第一个子元素添加
(2)作为兄弟元素添加
$obj.before($new)
新元素添加在$obj之前
$obj.after($obj)
新元素添加在$obj之后
(3)移除
&obj.remove()
移除$obj
<script>
// 创建H1
var h1 = $("<h1></h1>").html("标题1").attr("id","d1");
// 创建h2
var h2 = $("<h2 id='d2'>标题2</h2>");
// 添加
$("body").append(h1).prepend(h2);
h2.before(h1);
var p = $("<p>段落</p>");
h2.after(p);
// 移除
h1.remove(); // 删除当前的h1元素
</script>
三、jQuery处理事件
1. 事件绑定
$(document).ready(function (){文档加载完毕后执行})
$().ready(function (){文档加载完毕后执行})
$(function (){文档加载完毕后执行})
与原生的onload事件的区别:
原生onload事件会造成覆盖问题,永远只执行最后一个onload,需要手动检测;
ready()
内部实现了检测,不会产生覆盖问题,按照代码书写顺序,一次执行
(1) 等待文档加载完毕
(2) 事件绑定
- jQuery对象调用on()
$("h1").on("click",function (){})
- jQuery对象调用bind()
$("input").bind("change",function (){})
- 省略on前缀的事件名作为方法名直接调用
$("input").change(function (){})
<script>
$(function (){
// 文档加载完毕后执行
$("h1").on("click",function (){
// alert("h1被点击");
alert(this.innerHTML)
// 原生JS使用原生方法,jQuery对象使用jQuery方法,还可以写成alert($(this).html())
});
$("h1").bind("mouseover",function (){
console.log("mouseover");
});
$("h1").mouseout(function (){
console.log("mouseout");
});
$("h1").html("Chancey")
});
</script>
-
this
this指代事件的触发事件,直接使用,表示原生JS对象,只能调用原生方法;可以使用
$(this)
转换为jquery对象,调用jQuery的方法