1、jQuery-DOM操作
1.1 内容操作
有如下三个方法:
- html()方法:获取/设置元素的标签体内容(包括其子标签及其内容)
- text()方法:获取/设置元素的标签体纯文本内容(包括其子标签及其内容)
- val()方法:获取/设置元素的value属性值
<input type="text" class="test1" value="hello">
<div class="test2">div标签内的内容<span>span标签内的内容</span></div>
下面几段代码均直接针对于上述代码进行操作
var()方法
<script>
var input1 = $(".test1").val();
console.log(input1);
</script>
<script>
var input2 = $(".test1").val("world");
</script>
html()方法:
<script>
var div1 = $(".test2").html();
console.log(div1);
</script>
<script>
var div2 = $(".test2").html("第一次修改后的内容");
console.log(div2);
</script>
<script>
var div3 = $(".test2").html("<a href='https://www.baidu.com'>第二次修改后的内容</a>");
</script>
text()方法
<script>
var div4 = $(".test2").text();
console.log(div4);
</script>
<script>
var div5 = $(".test2").text("<a href='https://www.baidu.com'>第三次修改后的内容</a>");
</script>
1.2 属性操作方法
1.2.1 通用属性操作
- attr()-------获取/设置元素的属性
- removeAttr()------删除属性
- prop()------获取/设置元素的属性
- removeProp()------删除属性
attr和prop的区别 如果操作的是属性的固有属性,推荐使用prop,如果操作的是自定义的属性,则推荐使用attr
<ul>
<li id="bj" name="beijing" xxx="yyy">北京</li>
<li id="jj" name="jiangsu">江苏</li>
<li id="tj" name="tianjin">天津</li>
</ul>
<input type="checkbox" id="hobby">
<script>
var result1 = $("#bj").attr("name");
console.log(result1);
var result2 = $("#bj").attr("name","heilongjiang");
var result3 = $("#jj").attr("history","son dynasty");
var result4 = $("#jj").removeAttr("history","son dynasty");
var check = $("#hobby").prop("checked");
console.log(check);
alert(check);
</script>
1.2.2 对class属性操作
- addClass()------添加class属性
- removeClass()------删除class属性值
- toggleClass()------切换class属性
使用如下:
<style>
.one{
width: 100px;
height: 100px;
border: none;
background-color: blue;
margin:50px;
}
.two{
width: 200px;
height: 200px;
border: none;
background-color: red;
margin: 50px;
}
.three{
border: 5px solid rgb(47, 173, 47);
}
</style>
<button id="btn1">切换样式</button>
<button id="btn2">添加样式</button>
<button id="btn3">清除样式</button>
<div id="div" class="one"></div>
<script>
$("#btn1").click(function(){
$("#div").prop("class","two");
});
$("#btn2").click(function(){
$("#div").addClass("three");
})
$("#btn3").click(function(){
$("#div").removeClass("three");
$("#div").removeClass("two");
$("#div").prop("class","one");
})
</script>
通过toggleClass切换样式(本质上是添加与删除)
<style>
.one{
height: 100px;
width: 100px;
background-color: blue;
border: none;
margin: 30px;
}
.two{
height: 100px;
width: 100px;
background-color: red;
border: none;
margin: 30px;
}
</style>
<button id="btn" >添加与清除新样式</button>
<div id="div" class="one"></div>
<script>
$("#btn").click(function(){
$("#div").toggleClass("two");
})
</script>
1.3 增删元素操作
-
添加操作
- append():将元素作为子元素添加到元素末尾
例如:对象1.append(对象2),表示将对象2添加到对象1的内部,并且在末尾处,是父子关系。 - prepend():将新添元素作为子元素添加到元素开头
例如:对象1.append(对象2),表示将对象2添加到对象1的内部,并且在开头处,是父子关系。 - appendTo():将元素作为子元素添加到元素末尾
例如:对象1.appendTo(对象2),表示将对象1添加到对象2的内部,并且在末尾处,两元素是父子关系。 - prependTo():将元素作为子元素添加到元素开头
例如:对象1.appendTo(对象2),表示将对象1添加到对象2的内部,并且在开头处,两元素是父子关系。 - after():添加一个元素到另一个元素后边
对象1.after(对象2):将对象2添加到对象1后面,两者是兄弟关系 - before():添加一个元素到另一个元素前面
对象1.before(对象2):将对象2添加到对象1前面,两者是兄弟关系。 - insertAfter():
对象1.insertAfter(对象2):将对象1添加到对象2后面。兄弟关系。 - insertBefore():
- 对象1.insertBefore(对象2):将对象1添加到对象2前面。兄弟关系。
-
删除操作
- remove():移除指定元素
- empty():清空元素所有后代元素,但保存当前对象及其属性节点。
例如:拿append举例使用,如下
<body>
<button id="btn1">添加一个已经存在的对象</button>
<button id="btn2">添加一个目前不存在的对象</button>
<ul id="father">
<li id="son1">第一个儿子</li>
<li id="son2">第二个儿子</li>
<li id="son3">第三个儿子</li>
</ul>
<ul id="mother">
<li id="daughter1">有一个女儿</li>
</ul>
<script>
$("#btn1").click(function(){
$("#father").append($("#daughter1"));
})
$("#btn2").click(function(){
$("#father").append("<li id='daughter2'>将来再生一个女儿</li>")
})
</script>
</body>
分析:$("#father").append($("#daughter1")); 这句代码中$("#daughter1") 是一个已经存在的对象,它是id=mother的子元素,并最后将其添加(相当于移动)到了id=father的父标签的子元素的末尾;$("#father").append("<li id='daughter2'>将来再生一个女儿</li>") 这句中对象"
- 将来再生一个女儿
- "是临时创建的对象,每次点击时都会创建这样一个对象。
例如:remove()方法和empty()方法的使用
<body>
<button id="btn1">清除1</button>
<button id="btn2">清除其所有子元素</button>
<ul id="father">
<li id="son1">1</li>
<li id="son2">2</li>
<li id="son3">3</li>
</ul>
<script>
$("#btn1").click(function(){
$("#son1").remove();
})
$("#btn2").click(function(){
$("#father").empty();
})
</script>
</body>
</html>
需要注意的是你要清除的是哪个对象或者是哪个对象下面的所有子元素。
2、JQuery动画
2.1 显示和隐藏元素动画
- speed参数又三个预定义取值:slow,normal,fast,或者自定义毫秒数
- easing参数用来指定切换效果,默认是swing(先慢,中间快,后慢),其他还有linear(匀速移动)
- fn参数是动画完成时执行的函数,每个元素执行一次
- 默认显示和隐藏方式
- show([speed],[easing],[fn]) 显示
- hide([speed],[easing],[fn]) 隐藏
- toggle([speed],[[easing],[fn]) 切换显示/隐藏
- 滑动显示和隐藏方式
- slideDown([speed],[easing],[fn]) 显示
- slideUp([speed],[easing],[fn]) 隐藏
- slideToggle([speed],[easing],[fn]) 切换显示隐藏
- 淡入淡出显示和隐藏方式
- fadiIn([speed],[easing],[fn]) 显示
- fadeOut([speed],[easing],[fn]) 隐藏
- fadeToggle([speed],[easing],[fn]) 切换显示隐藏
例题一:默认显示隐藏 效果:
<body>
<button id="show">显示</button>
<button id="hide">隐藏</button>
<button id="shift">切换显示隐藏</button>
<div id="div" style="width: 200px;height:200px;background-color: greenyellow;"></div>
<script>
$("#show").click(function(){
$("#div").show("normal","linear",function(){
alert("显示了");
})
})
$("#hide").click(function(){
$("#div").hide("slow","swing",function(){
alert("隐藏了");
})
})
$("#shift").click(function(){
$("#div").toggle("fast");
})
</script>
</body>
例题二:其他两种动画方式实现都一样,看下效果即可。 滑动显示隐藏
淡入淡出显示隐藏
2.2 自定义动画
具体步骤看这
3、jQurey静态方法
3.1 数组及对象操作
3.1.1 数组转移
- map(原数组, 执行函数)
将一个数组中的元素转换到另一个数组中
作为参数的转换函数会为每个数组元素调用,而且会给这个转换函数传递一个表示被转换的元素作为参数。转换函数可以返回转换后的值、null(删除数组中的项目)或一个包含值的数组,并扩展至原始数组中。 如下:
var arr=$.map( [0,1,2], function(n){
return n + 4;
});
3.1.2 过滤
- filter(“选择器”|jq对象|用于匹配的dom元素|函数)
将符合要求的元素选中返回。
例如:传入一个函数,过滤出div文本后缀数字大于2的元素
<body>
<div>hello1</div>
<div>hello2</div>
<div>hello3</div>
<div>hello4</div>
<script>
var result = $("div").filter(function (index, item) {
var text = $(item).text();
text = text.slice(text.length - 1);
return text > 2;
})
for (var i = 0; i < result.length; i++) {
console.log($(result[i]).html());
}
</script>
</body>
例如:传入一个选择器,将过滤出来的元素背景改为红色
<body>
<div>hello1</div>
<div class="select">hello2</div>
<div>hello3</div>
<div>hello4</div>
<script>
var result = $("div").filter(".select");
result.css("backgroundColor","red");
</script>
</body>
3.1.3 DOM元素集合转数组
- toArray()
把jQuery集合中所有DOM元素恢复成一个数组
console.log($('li').toArray());
3.2.4 合并数组
- merge()
合并两个数组(只能合并两个),不排序,不去重。
返回的结果会修改第一个数组的内容——第一个数组的元素后面跟着第二个数组的元素。要去除重复项,请使用$.unique()方法。
console.log($.merge( [0,1,2], [2,4,3]));
3.1.5 遍历
例如:遍历如下内容:
<ul id="city">
<li>苏州</li>
<li>长沙</li>
<li>杭州</li>
<li>南京</li>
</ul>
注意引入jquery库
<script>
var cities = $("#city li");
for(var i = 0; i<cities.length; i++){
console.log(i+":"+cities[i].innerHTML);
}
</script>
<script>
$("#city li").each(function(){
console.log(this.innerHTML);
})
$("#city li").each(function(index, element){
console.log(index + ":" + element.innerHTML);
})
$("#city li").each(function(index, element){
console.log(index + ":" + $(element).html());
})
</script>
进阶:遍历中加上条件 下面时js的实现方式
<script>
var cities = $("#city li");
for (var i = 0; i < cities.length; i++) {
if("长沙" === cities[i].innerHTML){
break;
}
console.log(i + ":" + cities[i].innerHTML);
}
</script>
下面是jquery中的实现方式: 再jquery中不能使用break和continue,但false等于break,true等于continue,如下:
<script>
var cities = $("#city li");
cities.each(function(index, element){
if("长沙" === cities[i].innerHTML){
return false;
}
console.log(index + ":" + element.innerHTML);
})
</script>
- $.each(object,[callback])
<script>
$.each($("#city li"),function(){
console.log($(this).html())
})
</script>
object可以是数组对象,也可以是普通对象,如下:
<body>
<script>
var obj = {
name : "zhangsan",
age : 19,
height : "1.88"
}
$.each(obj,function(key, value){
console.log(key,value);
})
$.each([0,1,2],function(i,n){
console.log((i + ":" + n));
})
</script>
</body>
- for…of
jquery3.0版本之后提供的方式
<script>
for(li of $("#city li")){
console.log($(li).html());
}
</script>
3.1.6 判断某元素是否在数组中
jQuery.inArray(value,array])
3.2 测试方法
3.2.1 检测对象类型
console.log($.type($));
console.log(jQuery.type(true) === "boolean");
console.log(jQuery.type(3) === "number");
3.2.2 判断对象是否为空对象
- isEmptyObject()
测试对象是否是空对象(不包含任何属性),这个方法既检测对象本身的属性,也检测从原型继承的属性(因此没有使用hasOwnProperty方法更具体)
console.log(jQuery.isEmptyObject({}));
console.log(jQuery.isEmptyObject({ foo: "bar" }));
function Animal(name){this.name=name}
var cat = new Animal("猫咪");
function BuOu(){}
BuOu.prototype=cat;
cat.constructor = BuOu;
var diandian = new BuOu();
console.log(jQuery.isEmptyObject(cat));
console.log(jQuery.isEmptyObject(diandian));
diandian.age=10;
console.log(diandian.hasOwnProperty('name'));
console.log(diandian.hasOwnProperty('age'));
3.2.3 测试对象是否为纯粹对象
- isPlainObject()
测试对象是否是纯粹的对象(通过 “{}” 或者 “new Object” 创建的)
console.log(jQuery.isPlainObject({}));
console.log(jQuery.isPlainObject("test"));
console.log($.isPlainObject($('body')))
3.3 字符串操作
- param()
将表单元素数组或者对象序列化。是.serialize()的核心方法。 例如:
var obj={name:"张三",age:12}
var str = $.param(obj);
$("#results").text(str);
- parseJSON()
解析json字符串转换为js对象/数组。
var json = '{"name":"Tom", "age":12}'
console.log($.parseJSON(json));
json = '[{"name":"Tom", "age":12},{"name":"lilly", "age":12}]';
console.log($.parseJSON(json));
- trim()
去掉字符串起始和结尾的空格,多用于用户数据的清洗 例如:
console.log($.trim(" hello, how are you? "));
4、jQuery插件机制
jQuery中的插件机制主要作用是增强jQuery的功能
主要实现方式有两种: 1、$.fn.extend(object) 增强通过jQuery获取的对象的功能,使得所有对象都可以调用在这里面定义的方法。 2、$.extend(object) 增强jQuery对象自身的功能,在其中定义的方法可以直接通过$或者jQuery对象调用
注意:extend里面要加上一对大括号{},语法要求 基本使用:
<body>
<input type="button" id="btn" value="点我弹框">
<script>
$.fn.extend({
check:function(){
alert("hello");
}
});
$("#btn").click(function(){
$("#btn").check();
});
</script>
</body>
例题一:通过$.fn.extend(object)插件机制实现全选全不选
<body>
<input type="checkbox" value="footBall">足球
<input type="checkbox" value="basketball">篮球
<input type="checkbox" value="volleyBall">排球
<input type="button" id="btn1" value="点击选择全部复选框">
<input type="button" id="btn2" value="点击取消选择全部复选框">
<script>
$.fn.extend({
check:function(){
this.prop("checked",true);
},
uncheck:function(){
this.prop("checked",false);
}
})
$("#btn1").click(function(){
$("input[type='checkbox']").check();
})
$("#btn2").click(function(){
$("input[type='checkbox']").uncheck();
})
</script>
</body>
例题二:通过$.extend() 定义比较较大值和较小值的方法并进行全局调用
<body>
<script>
$.extend({
max:function(a,b){
return a>=b?a:b;
},
min:function(a,b){
return a<=b?a:b;
}
})
var max = $.max(2,3);
alert(max);
var min =$.min(2,3);
alert(min);
</script>
</body>
|