1. jQuery 属性操作
1.1 设置获取元素固有属性值 prop()
所谓元素固有属性就是元素本身自带的属性,比如元素里面的 href ,比如 元素里面的type。
- 获取属性语法
prop('属性')
<a href="http://www.itcast.cn" title="都挺好">
<script>
$(function(){
element.prop('属性名')
console.log($("a").prop("href"))
$("a").prop("title", "我们都挺好")
})
</script>
- 设置属性语法
prop('属性','属性值')
1.2 设置或获取元素自定义属性值 attr()
用户自己给元素添加的属性,我们称之为自定义属性。
比如给div添加index=”1“
- 获取属性语法
attr('属性')
- 设置属性语法
attr('属性', '属性值')
1.3 数据缓存 data()
data() 方法可以在指定的元素上存取数据,并不会修改DOM元素解构。一旦页面刷新,之前存放的数据都会被移除。
- 附加数据语法
data('name','value')//向被选元素附加数据
- 获取数据语法
data('name')//向被选元素获取数据
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="jquery.min.js"></script>
</head>
<body>
< a href=" " title="都挺好">都挺好</ a>
<input type="checkbox" name="" id="" checked>
<div index="1" data-index="2">我是div</div>
<span>123</span>
<script>
$(function () {
//1. element.prop("属性名") 获取元素固有的属性值
console.log($("a").prop("href"));
$("a").prop("title", "我们都挺好");
$("input").change(function () {
console.log($(this).prop("checked"));
});
// console.log($("div").prop("index"));
// 2. 元素的自定义属性 我们通过 attr()
console.log($("div").attr("index"));
$("div").attr("index", 4);
console.log($("div").attr("data-index"));
// 3. 数据缓存 data() 这个里面的数据是存放在元素的内存里面
$("span").data("uname", "andy");
console.log($("span").data("uname"));
// 这个方法获取data-index h5自定义属性 第一个 不用写data- 而且返回的是数字型
console.log($("div").data("index"));
})
</script>
</body>
</html>
2. jQuery 元素操作
2.1 遍历元素
- 语法1:
$('div').each(function(index, domEle){xxx})
demEle是每个DOM元素对象,不是jQuery对象,所以想要使用jQuery方法,需要给这个dom元素转换为jQuery对象$(domEle)
<script>
$(function() {
// $("div").css("color", "red");
// 如果针对于同一类元素做不同操作,需要用到遍历元素(类似for,但是比for强大)
var sum = 0;
// 1. each() 方法遍历元素
var arr = ["red", "green", "blue"];
$("div").each(function(i, domEle) {
$(domEle).css("color", arr[i]);
// sum += parseInt($(domEle).text());
})
// console.log(sum);
})
</script>
- 语法2:
$.each(object, function(index, domEle){xxx})
$.each()方法可用于遍历任何对象,主要用于数据处理,比如数组,对象。
// 2. $.each() 方法遍历元素 主要用于遍历数据,处理数据
$.each($("div"), function(i, ele) {
console.log(i);
console.log(ele);
});
// $.each(arr, function(i, ele) {
// console.log(i);
// console.log(ele);
// })
$.each({
name: "andy",
age: 18
}, function(i, ele) {
console.log(i); // 输出的是 name age 属性名
console.log(ele); // 输出的是 andy 18 属性值
})
2.2 创建元素
语法:
$("<li></li>")
2.3 添加元素
- 内部添加
element.append("内容")
把内容放入匹配元素内部最后面
element.prepend("内容")
把内容放到匹配元素内部最前面
- 外部添加
element.after("内容")//放在后面
element.before("内容")//放在前面
内部添加元素,生成之后,他们是父子关系。
外部添加元素,生成之后,他们是兄弟关系。
2.4 删除元素
element.remove() //删除匹配元素本身
element.empty() //删除匹配元素集合中所有子结点
element.html("") //清空匹配的元素内容
2.5 jQuery 尺寸、位置操作
2.5.1 jQuery 尺寸
语法 | 用法 |
---|---|
width()/height() | 获取设置元素 width 和 height 大小 |
innerWidth()/innerHeight() | 获取匹配元素宽度和高度值 包含padding |
outerWidth()/outerHeight() | 获取匹配元素宽度和高度值 包含padding和border |
outerWidth(true)/outerHeight(true) | 获取匹配元素宽度和高度值 包含padding和border和margin |
- 以上参数为空,则是获取相应值,返回的是数字型
- 如果参数为数字,则是修改相应值
- 参数可以不必写单位
2.5.2 jQuery 位置
主要有三个:offset()
、position()
、scrollLeft()/scrollTop()
- offset()
(1)获取设置距离文档的位置,跟父级没有关系
(2)offset().top 获取距离文档顶部的距离
(3)offset().left 获取距离文档左侧的距离
(4)可以设置元素的偏移:offset({top: 10, left: 30})
// 1. 获取设置距离文档的位置(偏移) offset
console.log($(".son").offset());
console.log($(".son").offset().top);
$(".son").offset({
top: 200,
left: 200
});
- position()
(1)返回被选元素相对于带有定位的父级偏移坐标,如果父级都没有定位,则以文档为主
(2)这个方法只能获取不能设置偏移 - scrollLeft()/scrollTop()
(1)设置或返回被选元素被卷去的头部和左侧
(2)不跟参数是获取,参数为不带单位的数字则是设置被卷去的头部
案例:带有动画的返回顶部
(1)animate动画函数里面有个 scrollTop 属性,可以设置位置
$(function () {
$(document).scrollTop(100);
// 被卷去的头部 scrollTop() / 被卷去的左侧 scrollLeft()
// 页面滚动事件
var boxTop = $(".container").offset().top;
$(window).scroll(function () {
// console.log(11);
console.log($(document).scrollTop());
if ($(document).scrollTop() >= boxTop) {
$(".back").fadeIn();
} else {
$(".back").fadeOut();
}
});
// 返回顶部
$(".back").click(function () {
// $(document).scrollTop(0);
$("body, html").stop().animate({
scrollTop: 0
});
// $(document).stop().animate({
// scrollTop: 0
// }); 不能是文档而是 html和body元素做动画
})
})
案例:品优购电梯导航
$(function() {
// 当我们点击了小li 此时不需要执行 页面滚动事件里面的 li 的背景选择 添加 current
// 节流阀 互斥锁
var flag = true;
// 1.显示隐藏电梯导航
var toolTop = $(".recommend").offset().top;
toggleTool();
function toggleTool() {
if ($(document).scrollTop() >= toolTop) {
$(".fixedtool").fadeIn();
} else {
$(".fixedtool").fadeOut();
};
}
$(window).scroll(function() {
toggleTool();
// 3. 页面滚动到某个内容区域,左侧电梯导航小li相应添加和删除current类名
if (flag) {
$(".floor .w").each(function(i, ele) {
if ($(document).scrollTop() >= $(ele).offset().top) {
console.log(i);
$(".fixedtool li").eq(i).addClass("current").siblings().removeClass();
}
})
}
});
// 2. 点击电梯导航页面可以滚动到相应内容区域
$(".fixedtool li").click(function() {
flag = false;
console.log($(this).index());
// 当我们每次点击小li 就需要计算出页面要去往的位置
// 选出对应索引号的内容区的盒子 计算它的.offset().top
var current = $(".floor .w").eq($(this).index()).offset().top;
// 页面动画滚动效果
$("body, html").stop().animate({
scrollTop: current
}, function() {
flag = true;
});
// 点击之后,让当前的小li 添加current 类名 ,姐妹移除current类名
$(this).addClass("current").siblings().removeClass();
})
})
3. jQuery 事件
3.1 jQuery 事件注册
element.事件(function(){})
$("div").click(function(){事件处理程序})
其他事件和原生基本一致。比如 mouseover、mouseout、blur、focus、change、keydown、keyup、resize、scroll等。
$("div").click(function(){
$(this).css("background", "purple")
})
3.2 jQuery事件处理
3.2.1 事件处理 on() 绑定事件
element.on(events, [selector], fn)
- events:一个或多个用空格分隔的事件类型,如"click"或"keydown" 。
- selector: 元素的子元素选择器 。
- fn:回调函数 即绑定在元素身上的侦听函数。
$("div").on({
mouseenter: function(){
$(this).css("background", "skyblue")
}
click: function(){
$(this).css("background", "purple")
}
})
//或者
$("div").on("mouseenter mouseleave", function(){
$(this).toggleClass("current")
})
- on()方法优势1:
可以绑定多个事件,多个处理事件程序 - on()方法优势2:
可以事件委派操作。事件委派的定义就是,把原来加给子元素身上的事件绑定在父元素身上,就是把时间委派给父级元素
$("ul").on("click", "li", function(){})
事件是绑定在”ul“身上的,所以只有一个 ul 元素添加了点击事件,但是我们的触发对象是”li“ ,只有点击了小”li“才触发,有事件冒泡,会冒到父级上,父级身上有个点击事件,所以执行。
- on()方法优势3:
动态创建的元素,click() 没有办法绑定事件,on()可以给动态生成的元素绑定事件。
var li = $("<li>我是后来创建的</li>");
$("ol").append(li);
$("ol li").click(function () {
alert(11);
})
$("ol").on("click", "li", function () {
alert(11);
})
案例:发布微博案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
ul {
list-style: none;
}
.box {
width: 600px;
margin: 100px auto;
border: 1px solid #000;
padding: 20px;
}
textarea {
width: 450px;
height: 160px;
outline: none;
resize: none;
}
ul {
width: 450px;
padding-left: 80px;
}
ul li {
line-height: 25px;
border-bottom: 1px dashed #cccccc;
display: none;
}
input {
float: right;
}
ul li a {
float: right;
}
</style>
<script src="jquery.min.js"></script>
<script>
$(function(){
//1.点击发布按钮,动态创建一个小li,放入文本框的内容和删除按钮,并且添加到ul中
$(".btn").on("click", function(){
var li = $("<li></li>");
li.html($(".txt").val() + "<a href='javascript:;'>删除</a>");
$("ul").prepend(li);
li.slideDown();
$(".txt").val("");
})
//2.点击删除按钮,可以删除当前的微博留言li
$("ul").on("click", "a", function(){
$(this).parent().slideUp(function(){
$(this).remove();
});
})
})
</script>
</head>
<body>
<div class="box" id="weibo">
<span>微博发布</span>
<textarea name="" class="txt" cols="30" rows="10"></textarea>
<button class="btn">发布</button>
<ul>
</ul>
</div>
</body>
</html>
3.2.2 事件处理off()解绑事件
$("div").off()//解除div身上所有事件
$("div").off("click")//解除div身上的点击事件
$("ul").off("click","li")//解绑事件委托
如果有的事件只想触发一次,可以使用 one() 来绑定事件
<p></p>
$("p").one("click", function(){alert(11)})
3.2.3 自动触发事件 trigger()
有些事件希望自动触发, 比如轮播图自动播放功能跟点击右侧按钮一致。可以利用定时器自动触发右侧按钮点击事件,不必鼠标点击触发。
$("div").on("click", function() {
alert(11);
});
element.click() // 第一种简写形式
element.trigger("type") // 第二种自动触发模式
// $("p").trigger("click"); // 此时自动触发点击事件,不需要鼠标点击
element.triggerHandler(type) // 第三种自动触发模式
// triggerHandler模式不会触发元素的默认行为,这是和前面两种的区别。
3.3 jQuery 事件对象
element.on(events, [selector], function(event){})
阻止默认行为:event.preventDefault()
或者 return false
阻止冒泡:event.stopPropagation()