前端-jQuery-长期维护
############### jQuery简介 ################
jQuery这是非常重要的,在django项目中大量的前端都是使用jQuery进行操作 为什么要学习这个jQuery?
1,做同样的事情,jQuery比原生的js,写起来简单太多了,写起来非常的简练
2,jQuery相当于python的第三方模块,其实就是别人写好的代码,我们拿过来用,
3,没有这个jQuery也是可以的,但是比较麻烦,所以我们先学习js的dom操作,这个是基础, jQuery的学习内容?
1,改变标签
2,改变标签的属性
3,改变标签的样式,
4,事件相关
我们使用的jQuery的3.x版本,
############### jQuery选择器和筛选器 ################
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>jQuery初识</title>
</head>
<body> <div id="d1">d1</div>
<div class="c1">.c1</div>
<p class="c2">p</p>
<a class="c2" href="">a标签</a> <!--筛选器-->
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul> <!--not-->
<div id="d2">
<p class="c1">div</p>
<p class="c1">div</p>
<p class="c2">div</p>
<p class="c2">div</p>
</div> <!--:has-->
<div id="d3">
<div style="background-color: green">
<p>div中的p标签</p>
</div> <div style="background-color: red">
<a href="">div中的a标签</a>
</div>
</div> <!--属性选择器-->
<form action="" id="f1">
<label>用户名:
<input name="username" type="text" disabled>
</label> <label>密码:
<input name="pwd" type="password">
</label> <label>篮球:
<input name="hobby" value="basketball" type="checkbox">
</label> <label>足球:
<input name="hobby" value="football" type="checkbox">
</label> <label>男
<input name="gender" value="1" type="radio">
</label> <label>女:
<input name="gender" value="0" type="radio">
</label> </form>
<script src="jquery-3.2.1.min.js"></script>
<script> //id选择器
//这个$就是代表的jQuery(),这是jQuery的语法
$("#d1")//这种是返回一个列表,数组,必须要取出来,才是对应的标签
$("#d1")[0] //属性选择器,点后面加属性就可以了,任何属性都可以查,
$(".c1")
$(".c1")[0] //标签选择器
$("div")
$("div")[0]//这是找到div标签中的第一个 //上面是三种常用的选择器,这三种可以配合使用
$("a.c2")[0] //这就是取出了属性是c2的a标签 //找所有的选择器
$("*"); //组合选择器
$("a,#d1")//这是找到两种标签,中间用逗号分割 //层级选择器
//子孙选择器
$("form input")//这是在form标签的子孙标签中,去查到input标签,
//儿子选择器
$("label input")//在label的儿子标签中,去查到input标签,
//毗邻选择器
$("label+input")//这是找input标签,这个标签和label标签紧挨着
// 弟弟选择器
$("#p2~li") //这是找到p2标签下面的,所有的和他同级的li标签, //html的dom对象,和jQuery对象
var d1 = document.getElementById("d1")//这是一个dom对象
var $d1 = $("#d1")//这是一个jQuery对象,所有的jQuery对象的变量名字,约定俗成的,都要在前面加一个$符号,用来区分普通的dom对象,
//jQuery对象转换成dom对象,直接使用索引取出,
//dom对象转换成jQuery对象,直接使用$(dom对象)符号包一下,就是一个jQuery对象了, //筛选器
$("ul")//找到ul标签
$("ul li")//找到ul标签下面的所有li标签
$("ul li:first")//找到ul标签下面的第一个li标签
$("ul li:last")//找到ul标签下面的最后一个li标签
$("ul li:eq(2)")//找到ul标签下面的第3个li标签
$("ul li:even")//找到ul标签下面的索引是偶数的li标签
$("ul li:odd")//找到ul标签下面的索引是奇数的li标签
//隔行变色就是这样做的
$("ul li:gt(0)")//找到ul标签下面的索引大于0的li标签
$("ul li:lt(2)")//找到ul标签下面的索引是小于2的li标签 //筛选器-not
$("#d2 p:not(.c2)")//移除p标签下面,属性是c2的,移除不满足条件的 //筛选器-has
$("#d3 div:has(a)")//找到含有a标签的div //属性筛选器
$("input[name='hobby']")//找到属性是hobby 的输入框 //表单常用筛选
$(":text")
$("input[type='text']")
//这两种写法是一样的,第一种是简写 /*
:text
:password
:file
:radio
:checkbox :submit
:reset
:button //表单对象属性
:enabled
:disabled
:checked
:selected
* */ </script>
</body>
</html>
############### jQuery-筛选器2和样式操作,简单的点击事件实现灯点亮和关闭 ################
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>筛选器示例</title> <style>
.c1 {
height: 200px;
width: 200px;
border-radius: 50%;
background-color: red;
}
.c2 {
background-color: green;
}
</style>
</head>
<body> <ul>
<li id="l0">l0</li>
<li>l1</li>
<li>l2</li>
<li id="l3">l3</li>
<li>l4</li>
<li>l5</li>
</ul> <!--父标签-->
<div id="d1">div-1
<div id="d2">div-2
<div id="d3">div-3
<a href="">a标签</a>
</div>
</div>
</div> <!--兄弟和儿子--> <div id="dd">
<p>p0</p>
<p>p1</p>
<p id="p2">p2</p>
<p>p3</p>
</div> <div class="c1"></div> <script src="jquery-3.2.1.min.js"></script>
<script>
$("#l3")//这是找到id是l3的这个标签 //这是找到这个标签的上一个
$("#l3").prev(); //这是找到这个标签的下一个
$("#l3").next(); //这是找到这个标签上面所有的标签
$("#l3").prevAll(); //这是找到这个标签下面所有的标签
$("#l3").nextAll(); //这是找到l1下面的,直到找到l3为止,不包含l3
$("#l1").nextUntil("#l3"); //找父标签
$("a").parent()
//找到父标签的父标签,这是一种链式操作
$("a").parent().parent()
//找到所有的父标签
$("a").parents()
//直到找到某一个父标签为止
$("a").parentsUntil("body") //找到子标签
$("#dd").children() //找到兄弟标签,上边下面都能找到
$("#p2").siblings() // 查找find
$("div").find("p") //这是找到div标签,在这个结果集里面再去找p标签 // ########################################
//操作标签
//添加指定的CSS类名。
$("#p2").addClass("c2");
// 移除指定的CSS类名。
$("#p2").removeClass("c2");
// 判断样式存不存在
$("#p2").hasClass("c2");
// 切换CSS类名,如果有就移除,如果没有就添加。
$("#p2").toggleClass("c2"); //样式操作实例
//灯的点亮和点灭
// 第一步:找到要操作的元素
//语法和原生的还是不一样的
$(".c1").click(function () {
//this这是一个dom对象,要转换成为jQuery对象
$(this).toggleClass("c2")
}
) </script> </body>
</html>
############### jQuery操作左侧菜单的展示和隐藏的思路 ################
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>左侧菜单作业分解</title>
<style>
* {
margin: 0;
padding: 0;
} ul {
list-style-type: none;
} .hide {
display: none;
}
</style>
</head>
<body> <div class="left-menu">
<div class="menu-title">菜单一</div>
<div class="menu-items">
<ul>
<li><a href="">111</a></li>
<li><a href="">222</a></li>
<li><a href="">333</a></li>
</ul>
</div>
<div class="menu-title">菜单二</div>
<div class="menu-items hide">
<ul>
<li><a href="">111</a></li>
<li><a href="">222</a></li>
<li><a href="">333</a></li>
</ul>
</div>
<div class="menu-title">菜单三</div>
<div class="menu-items hide">
<ul>
<li><a href="">111</a></li>
<li><a href="">222</a></li>
<li><a href="">333</a></li>
</ul>
</div>
</div> <script src="jquery-3.2.1.min.js"></script>
<script>
// 需求分析
// 找到所有的.menu-title标签,绑定点击事件 // 点击事件具体要做的事儿
// 1. 找到当前点击菜单下面的.menu-items,把它显示出来(移除hide类)
// 2. 把其他的.menu-items隐藏,添加hide类 // 1. 找到所有的.menu-items, 隐藏
// 2. 找到当前点击菜单下面的.menu-items,把它显示出来(移除hide类) </script>
</body>
</html>
############### jQuery样式操作-操作class类-点击登录 ################
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>自定义模态框示例</title>
<style>
.cover {
position: absolute;
/*这是铺满屏幕*/
top: 0;
right: 0;
bottom: 0;
left: 0;
background-color: rgba(0,0,0,0.4);
z-index: 998;
} .modal {
height: 400px;
width: 600px;
background-color: white;
position: absolute;
top: 50%;
left: 50%;
margin-left: -300px;
margin-top: -200px;
z-index: 1000;
}
.hide {
display: none;
}
</style>
</head>
<body>
<button id="b1">屠龙宝刀,点击就送!</button>
<div class="cover hide"></div>
<div class="modal hide">
<form>
<p>
<label>用户名:
<input type="text">
</label>
</p>
<p>
<label>密码:
<input type="password">
</label>
</p>
<p>
<input type="submit" value="登录">
<input id="cancel" type="button" value="取消">
</p>
</form>
</div>
<script src="jquery-3.2.1.min.js"></script>
<script>
// 找到点击弹出模态框的按钮
$("#b1").click(function () {
// 把.cover和.modal显示出来(去除掉.hide)
$(".cover").removeClass("hide"); // 显示背景
$(".modal").removeClass("hide"); // 显示模态框
}); // 找到取消按钮,绑定事件
$("#cancel").click(function () {
// 给背景和模态框都加上hide类
$(".cover").addClass("hide");
$(".modal").addClass("hide");
})
</script>
</body>
</html>
############### jQuery修改css样式 ################
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>修改CSS样式</title>
</head>
<body> <p>乔小强</p>
<p>二哥</p>
<script src="jquery-3.2.1.min.js"></script>
<script>
$("p").click(function () {
// 把当前点击的标签变绿
// 在处理事件的函数中用 this 表示 当前触发事件的标签
// $(this).css("color", "red");
// $(this).css("font-size", "24px"); $(this).css({"color": "pink", "font-size": "48px"});//这个写法就是直接修改的标签的style属性,里面就是css样式,
//使用原生dom怎么写的?
// 是找到元素.style.color="green"
})
</script>
</body>
</html>
############### jQuery位置相关方法 ################
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>位置相关方法</title>
<style>
* {
margin: 0;
padding: 0;
} .c1,
.c2,
.c3 {
height: 100px;
width: 100px;
background-color: red;
} .c2 {
position: relative;
left: 200px;
top: 200px;
background-color: green;
} .c3 {
position: absolute;
left: 100px;
top: 100px;
background-color: blue;
}
</style>
</head>
<body> <div class="c1">我是div</div>
<div class="c2">
<div class="c3">我是c3</div>
</div> <script src="jquery-3.2.1.min.js"></script> <script> $(".c1").offset(); //返回一个字典:{top: 0, left: 0},获取位置
$(".c1").offset({top:100,left:100});//这是直接通过参数设置位置
$(".c3").position(); //获取匹配元素相对父元素的偏移,没有父标签就是和offset一样的结果,从body算父标签 </script>
</body>
</html>
############### jQuery位置相关方法-返回顶部实例 ################
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>位置相关示例之返回顶部</title>
<style>
* {
margin: 0;
} .c1 {
width: 100px;
height: 200px;
background-color: red;
} .c2 {
height: 50px;
width: 50px; position: fixed;
bottom: 15px;
right: 15px;
background-color: #2b669a;
} .hide {
display: none;
} .c3 {
height: 100px;
}
</style>
</head>
<body>
<button id="b1" class="btn btn-default">点我</button>
<div class="c1"></div>
<div class="c3">1</div>
<div class="c3">2</div>
<div class="c3">3</div>
<div class="c3">4</div>
<div class="c3">5</div>
<div class="c3">6</div>
<div class="c3">7</div>
<div class="c3">8</div>
<div class="c3">9</div>
<div class="c3">10</div>
<div class="c3">11</div> <button id="b2" class="btn btn-default c2 hide">返回顶部</button>
<script src="jquery-3.2.1.min.js"></script>
<script>
$(window).scroll(function () {//scroll这个是滚动事件
if ($(window).scrollTop() > 100) {//通过控制这个按钮的hide 属性来判断是否要展示,
$("#b2").removeClass("hide");
} else {
$("#b2").addClass("hide");
}
});
$("#b2").click(function () {
$(window).scrollTop(0);//设置距离顶部的距离是0,那么就是回到顶部了
})
</script>
</body>
</html>
############### jQuery尺寸操作 ################
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>尺寸示例</title>
<style>
.c1 {
height: 100px;
width: 200px;
padding: 10px;
margin: 20px;
background-color: red;
border: 5px solid green;
}
</style>
</head>
<body> <div>
<div class="c1">div</div>
</div>
<script src="jquery-3.2.1.min.js"></script> <script>
$(".c1").height(); //这是文本的高度
$(".c1").width();//这是文本的宽度
$(".c1").innerHeight(); //这是文本和padding的高度
$(".c1").innerWidth();//这是文本和padding的宽度
$(".c1").outerHeight();//这是文本和padding,还有border的高度
$(".c1").outerWidth();//这是文本和padding,还有border的宽度 </script> </body>
</html>
############### jQuery的文档操作 ##############
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>文档操作</title>
<style>
.error {
color: red;
}
</style>
</head>
<body> <div id="d1">
<p><span>span</span></p>
<div>div</div>
</div> <form id="f1">
<p>
<label>用户名:
<input class="need" name="username" type="text">
<span class="error"></span>
</label>
</p>
<p>
<label>密码:
<input class="need" name="password" type="password">
<span class="error"></span>
</label>
</p> <p>爱好:
<label>篮球
<input name="hobby" value="basketball" type="checkbox">
</label>
<label>足球
<input name="hobby" value="football" type="checkbox">
</label>
<label>双色球
<input name="hobby" value="doublecolorball" type="checkbox">
</label>
</p> <p>性别:
<label>男
<input name="gender" value="1" type="radio">
</label>
<label>女
<input name="gender" value="0" type="radio">
</label>
<label>保密
<input name="gender" value="2" type="radio">
</label>
</p> <p>
<label for="s1">从哪儿来:</label>
<select name="from" id="s1">
<option value="010">北京</option>
<option value="021">上海</option>
<option value="020">广州</option>
</select>
</p>
<p>
<label for="s2">从哪儿来:</label>
<select name="from" id="s2" multiple>
<option value="010">北京</option>
<option value="021">上海</option>
<option value="020">广州</option>
<option value="0755">深圳</option>
</select>
</p>
<p>
<label for="t1">个人简介:</label>
<textarea name="memo" id="t1" cols="30" rows="10"> </textarea>
</p>
<p>
<input id="b1" type="submit" value="登录">
<input id="cancel" type="button" value="取消">
</p>
</form>
<script src="jquery-3.2.1.min.js"></script> <script> // 对html和text文本操作
$("#d1");//获取id是d1的标签,这是一个jQuery对象
$("#d1")[0];//这是把jQuery对象里面的内容取出,这就是一个dom对象了
$("#d1")[0].innerHTML;//这是获取这个标签下面所有的html内容
$("#d1")[0].innerText;//这是获取这个标签下面所有的html内容
// ####################
//上面是dom操作
//使用jQuery操作
$("#d1").html();
$("#d1").text();
$("#d1").html("hehe");//这是设置html的值,但是这种设置之后,里面的子标签也会被替换
$("#d1").html("<p>123</p>>");//这是设置一个p标签,但是这种设置之后,里面的子标签也会被替换
$("#d1").text("hehe");//这是设置text的值,但是这种设置之后,里面的子标签也会被替换 //############################
// 对值操作:
$(":text").val();// 取得第一个匹配元素的当前值
$(":text").val("andy");// 设置所有匹配元素的值 //对多选框取值
$(":checkbox");//这是多选框中所有的值
$(":checkbox").val();//这是取多选框的值,但是只会返回第一个
$(":checkbox:checked");//这是取多选框中选中的值
$(":checkbox:checked").val();//这是取多选框被选中的值,但是只会返回第一个
//所以上面的两种取值方式都是有问题的,不能这么取
$("input").val();//这个取值也是默认只是去第一个input框的值,
$("input").val("1212")//但是设置值就是把所有的input框全都设置成这个了,
//这个取值和设置值的区别要记住,
//所以要循环读取才可以
var $checkbox = $(":checkbox:checked");
for (var i =0;i<$checkbox.length;i++){
console.log($checkbox[i]);
console.log($($checkbox[i]).val())
}
// 设置值
$(":checkbox:checked").val("basketball"); // 对单选框取值
$(":radio").val(); //对下拉框的单选和多选取值
$("#s1").val();
$("#s2").val();
// 设置值
$("#s2").val(["021","0755"]); //对文本框操作
$("#t1").val() </script> <script>
// 需求:点击登录按钮验证用户名和密码为不为空
// 为空就在对应的input标签下面显示一个错误提示信息 // 1. 给登录按钮绑定点击事件
// 2. 点击事件要做的事儿
// 2.1 找到input标签--> 取值 --> 判断为不为空 --> .length为不为0
// 2.2 如果不为空,则什么都不做
// 2.2 如果为空,要做几件事儿
// 2.2.1 在当前这个input标签的下面 添加一个新的标签,内容为xx不能为空 $("#b1").click(function () {
var $needEles = $(".need");//找到所有必填的input标签
for (var i = 0; i < $needEles.length; i++) {
if ($($needEles[i]).val().trim().length === 0) {
var labelName = $($needEles[i]).parent().text().trim().slice(0, -1);//父标签就是label标签,文本就是用户名密码,进行切片是把后面的冒号去掉
$($needEles[i]).next().text(labelName + "不能为空!");//next已经定位到了下面的span标签,text是对这个span标签进行设置文本
}
}
//现在点击登录相当于两个事件,一个是我们自己绑定的,一个是默认的点击会自动提交的事件,
//设置这个False就是说执行完我的这个事件之后,下面的就不执行了,这样我们可以看到效果
return false;
}) </script>
</body>
</html>
############### jQuery属性操作 ###############
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>属性操作</title>
</head>
<body> <img src="http://image11.m1905.cn/uploadfile/s2010/0205/20100205083613178.jpg" alt="">
<input type="button" id="b1" value="下一个"> <input checked type="checkbox" id="c1">
<input type="checkbox" id="c2"> <script src="jquery-3.2.1.min.js"></script> <script>
//属性设置
$("img").attr({"title":"213123"})
//属性删除
$("img").removeAttr("title") //判断一个radio,和CheckBox 有没有被选中
$("#c1").prop("checked")//返回一个布尔类型,
$("#c1").prop("checked",false)//设置值,取消选中 </script> <script>
var oldURL;
var newURL = "http://img01.yohoboys.com/contentimg/2017/08/12/21/012a1eab9842a752f8c4d98b8fc2777ad7.jpg"
$("#b1").click(function () {
var $imgEles = $("img");
// 修改img标签的src属性
oldURL = $imgEles.attr("src");
$imgEles.attr("src", newURL);
newURL = oldURL;
}); </script>
</body>
</html>
############### jQuery全选-取消-反选功能分析 ################
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>作业需求分析</title>
</head>
<body> <table border="1">
<thead>
<tr>
<th>#</th>
<th>姓名</th>
<th>职位</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox"></td>
<td>小东北</td>
<td>二人转演员</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>乔小强</td>
<td>xx演员</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>韩涉</td>
<td>导演</td>
</tr>
</tbody>
</table> <input type="button" id="b1" value="全选">
<input type="button" id="b2" value="反选">
<input type="button" id="b3" value="取消"> <script src="jquery-3.2.1.min.js"></script>
<script>
// 点击全选,表格中所有的checkbox都选中
// 1. 找checkbox
// 2. 全部选中 --> prop("checked", true); // 点击取消
// 1. 找checkbox
// 2. 全部取消选中 --> prop("checked", false); // 反选
// 1. 找到所有的checkbox
// 2. 判断
// 2.1 原来没选中的,要选中
// 2.2 原来选中的,要取消选中
</script>
</body>
</html>
############### jQuery文档操作 ################
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>文档操作示例</title>
</head>
<body> <ul id="u1">
<li id="l1">1</li>
<li>2</li>
<li>3</li>
</ul> <script src="jquery-3.2.1.min.js"></script> <script>
//添加标签到指定标签的后面
//使用原生的dom
var liEle = document.createElement("li");//创建
liEle.innerText = 0;//设置值
$("#u1").append("liEle");//在最末尾添加
$(liEle).appendTo("#u1");//这是另外一种写法,效果和上面一样
$("#u1").prepend("liEle");//在最前面添加
$(liEle).prependTo("#u1");//这是另外一种写法,效果和上面一样 /*
添加到指定元素外部的后面
$(A).after(B)// 把B放到A的后面
$(A).insertAfter(B)// 把A放到B的后面 添加到指定元素外部的前面
$(A).before(B)// 把B放到A的前面
$(A).insertBefore(B)// 把A放到B的前面
* */ // $("#u1").remove();// 直接把ul标签,和内部的子标签都删除了,
// $("#u1").empty();// 清空内部的子节点 </script> </body>
</html>
############### jQuery文档操作-添加一行记录 ################
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>点击在表格最后添加一条记录</title>
</head>
<body>
<table border="1" id="t1">
<thead>
<tr>
<th>#</th>
<th>姓名</th>
<th>爱好</th>
<th>操作</th>
</tr>
<tbody>
</thead>
<tr>
<td>1</td>
<td>小强</td>
<td>吃冰激凌</td>
<td>
<button class="delete">删除</button>
</td>
</tr>
<tr>
<td>2</td>
<td>二哥</td>
<td>Girl</td>
<td>
<button class="delete">删除</button>
</td>
</tr> </tbody>
</table> <button id="b1">添加一行数据</button>
<script src="jquery-3.2.1.min.js"></script>
<script>
// 绑定事件
$("#b1").click(function () {
// 生成要添加的tr标签及数据
var trEle = document.createElement("tr");
$(trEle).html("<td>3</td>" +
"<td>小东北</td>" +
"<td>社会摇</td>" +
"<td><button class='delete'>删除</button></td>");
// 把生成的tr插入到表格中
$("#t1").find("tbody").append(trEle);
}); // 每一行的=删除按钮绑定事件
$(".delete").click(function () {
$(this).parent().parent().remove();
}); </script>
</body>
</html>
############### jQuery-文档操作-替换操作 ################
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>替换操作示例</title>
</head>
<body> <p><a href="http://www.sogo.com">aaa</a></p>
<p><a href="">bbb</a></p>
<p><a href="">ccc</a></p> <button id="b1">点我!</button>
<script src="jquery-3.2.1.min.js"></script>
<script>
$("#b1").click(function () {
// 创建一个img标签
var imgEle = document.createElement("img");
$(imgEle).attr("src", "http://img4.imgtn.bdimg.com/it/u=1316130882,2083273552&fm=26&gp=0.jpg");
$("a").replaceWith(imgEle);
// $(imgEle).replaceAll("a");
}); </script>
</body>
</html>
############### jQuery文档操作-克隆操作 ################
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>克隆示例</title>
</head>
<body> <button id="b1">屠龙宝刀,点我就送!</button> <script src="jquery-3.2.1.min.js"></script>
<script>
$("#b1").click(function () {
$(this).clone().insertAfter(this);
});
</script>
</body>
</html>
############### jQuery事件-给未来元素绑定事件 ################
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>on绑定事件 点击在表格最后添加一条记录</title>
</head>
<body>
<table border="1" id="t1">
<thead>
<tr>
<th>#</th>
<th>姓名</th>
<th>爱好</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>小强</td>
<td>吃冰激凌</td>
<td>
<button class="delete">删除</button>
</td>
</tr>
<tr>
<td>2</td>
<td>二哥</td>
<td>Girl</td>
<td>
<button class="delete">删除</button>
</td>
</tr> </tbody>
</table> <button id="b1">添加一行数据</button>
<script src="jquery-3.2.1.min.js"></script>
<script>
//绑定事件现在有四种方法了
//1,标签内部写onclick=foo(this);
//2,原生的dom的js绑定,dom对象.onclick=function(){...}
//3,jQuery绑定事件,jQuery对象.click=function(){...}
//4,下面就是第四种也是jQuery绑定的方法,
// 4.1 jQuery对象.on("click",function(){...})
// 4.2 jQuery对象.on("click","选择器",function(){...}) 适用于给未来元素绑定事件,就是从前面的jQuery对象去找选择器,然后绑定事件,
// 以后绑定事件都使用on的方式去绑定,
// 绑定事件
$("#b1").on("click", function () {
// 生成要添加的tr标签及数据
var trEle = document.createElement("tr");
$(trEle).html("<td>3</td>" +
"<td>小东北</td>" +
"<td>社会摇</td>" +
"<td><button class='delete'>删除</button></td>");
// 把生成的tr插入到表格中
$("#t1").find("tbody").append(trEle);
}); // 每一行的删除按钮绑定事件
$("tbody").on("click", ".delete", function () {//为什么给tbody绑定删除事件,因为会有一层一层的事件捕获,tbody是一刷新页面就存在的,所以给以使用这标签
console.log(this);
$(this).parent().parent().remove();
}); </script>
</body>
</html>
############### jQuery键盘相关事件-批量操作 ################
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>键盘相关事件</title> </head>
<body> <table border="1" id="t1">
<thead>
<tr>
<th>#</th>
<th>姓名</th>
<th>爱好</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox"></td>
<td>小强</td>
<td>吃冰激凌</td>
<td>
<select>
<option value="0">下线</option>
<option value="1">上线</option>
<option value="2">离线</option>
</select>
</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>二哥</td>
<td>Girl</td>
<td>
<select>
<option value="0">下线</option>
<option value="1">上线</option>
<option value="2">离线</option>
</select>
</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>二哥</td>
<td>Girl</td>
<td>
<select>
<option value="0">下线</option>
<option value="1">上线</option>
<option value="2">离线</option>
</select>
</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>二哥</td>
<td>Girl</td>
<td>
<select>
<option value="0">下线</option>
<option value="1">上线</option>
<option value="2">离线</option>
</select>
</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>二哥</td>
<td>Girl</td>
<td>
<select>
<option value="0">下线</option>
<option value="1">上线</option>
<option value="2">离线</option>
</select>
</td>
</tr> </tbody>
</table>
<script src="jquery-3.2.1.min.js"></script>
<script>
// 确保绑定事件的时候DOM树是生成好的
$(document).ready(function () {
var mode = false;
var $bodyEle = $("body");
// 给文档绑定 监听键盘按键被按下去的事件,keydown是键盘按下的事件
$bodyEle.on("keydown", function () {
//
console.log(event.keyCode);
if (event.keyCode === 17) {
// 进入批量操作模式
mode = true;
console.log(mode);
}
});
// 按键抬起来的时候,退出批量操作模式,keyup 是键盘按下的事件
$bodyEle.on("keyup", function () {
//
console.log(event.keyCode);
if (event.keyCode === 17) {
// 进入批量操作模式
mode = false;
console.log(mode);
}
});
$("select").on("change", function () {
// 取到当前select的值
var value = $(this).val();
var $thisCheckbox = $(this).parent().siblings().first().find(":checkbox");
// 判断checkbox有没有被选中
if ($thisCheckbox.prop("checked") && mode) {
// 真正进入批量操作模式
var $checkedEles = $("input[type='checkbox']:checked");
for (var i = 0; i < $checkedEles.length; i++) {
// 找到同一行的select
$($checkedEles[i]).parent().siblings().last().find("select").val(value);
}
}
})
});
</script>
</body>
</html>
############### jQuery简单动画 ################
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>简单动画效果演示</title>
</head>
<body> <img width="600" src="http://img.diudou.com/file/news/yuwen/2016-08-07/db2cd785cd6ad8f05be167f18975253c.jpg" alt=""> <div>菜单一</div>
<div class="menu-items">
<ul>
<li>111</li>
<li>222</li>
<li>333</li>
</ul>
</div> <script src="jquery-3.2.1.min.js"></script> <script> $("img").hide(5000);//5秒隐藏,逐渐的缩小高度和宽度
$("img").toggle(5000);//逐渐展示出来 //滑动
$(".menu-items").slideUp(3000); //往上滑动
$(".menu-items").slideDown(3000); //往下滑动
$(".menu-items").slideToggle(3000); $("img").fadeTo(5000);//这是5秒之内透明度变成0
$("img").fadeTo(5000,0.3);//这是5秒之内透明度变成0.3
/*
// 淡入淡出
fadeIn([s],[e],[fn])
fadeOut([s],[e],[fn])
fadeTo([[s],o,[e],[fn]])
fadeToggle([s,[e],[fn]])
* */ </script> </body>
</html>
############### jQuery中的each操作 ################
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>each循环示例</title>
</head>
<body> <div>111</div>
<div>222</div>
<div>333</div>
<div>444</div>
<div>555</div>
<script src="jquery-3.2.1.min.js"></script> <script>
$("div").each(function () {//jQuery提供了一个循环读取的方法,使用原生的需要进行for循环
console.log(this)//this是每一个div标签,
console.log(this.innerText)//this是每一个div标签,
}) //each的另外一种用法
var a1 = [11, 22, 33, 44, 55]
$.each(a1, function (k, v) {//如果只有一个参数,就是只打印的索引,
console.log(k, v)//k是索引,v是值
}) //如何退出each循环
var a1 = [11, 22, 33, 44, 55]
$.each(a1, function (k, v) {//如果只有一个参数,就是只打印的索引,
console.log(k, v)//k是索引,v是值
if (v === 22) {
//后续的循环不进行了,使用return false
// return false
// 如果是跳过本次循环,而不是整个循环,使用return
return;
}
})
</script> </body>
</html>
############### jQuery中的data操作 ################
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>周末作业讲解</title>
<style>
.cover {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
background-color: #616161;
opacity: 0.4;
z-index: 998;
} .modal {
height: 200px;
width: 300px;
background-color: white;
position: absolute;
margin-top: -100px;
margin-left: -150px;
top: 50%;
left: 50%;
z-index: 1000;
} .hide {
display: none;
}
</style>
</head>
<body> <button id="add">新增</button>
<table border="1">
<thead>
<tr>
<th>#</th>
<th>姓名</th>
<th>爱好</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Egon</td>
<td>街舞</td>
<td>
<button class="edit-btn">编辑</button>
<button class="delete-btn">删除</button>
</td>
</tr>
<tr>
<td>2</td>
<td>Alex</td>
<td>烫头</td>
<td>
<button class="edit-btn">编辑</button>
<button class="delete-btn">删除</button>
</td>
</tr>
<tr>
<td>3</td>
<td>苑局</td>
<td>日天</td>
<td>
<button class="edit-btn">编辑</button>
<button class="delete-btn">删除</button>
</td>
</tr>
</tbody>
</table> <div id="myCover" class="cover hide"></div>
<div id="myModal" class="modal hide">
<div>
<p>
<label for="modal-name">姓名</label>
<input type="text" id="modal-name">
</p>
<p>
<label for="modal-hobby">爱好</label>
<input type="text" id="modal-hobby">
</p>
<p>
<button id="modal-submit">提交</button>
<button id="modal-cancel">取消</button>
</p>
</div>
</div>
<script src="./jquery-3.2.1.min.js"></script>
<script> // 定义一个弹出模态框的函数
function showModal() {
$("#myCover,#myModal").removeClass("hide");
} // 关闭模态框
function closeModal() {
// 1. 清空模态框中的input
$("#myModal").find("input").val("");
$("#myCover,#myModal").addClass("hide");
} // 给新增按钮绑定事件
$("#add").on("click", function () {
// 把模态框弹出!
// $("#myCover").removeClass("hide");
// $("#myModal").removeClass("hide");
showModal()
}); // 模态框中的取消按钮绑定事件
$("#modal-cancel").on("click", function () {
// 2. 隐藏模态框
closeModal(); }); // 模态框中的提交按钮绑定事件
$("#modal-submit").on("click", function () {
// 1. 取到 用户 填写的 input框的值
var name = $("#modal-name").val(); // 把用户在模态框里输入的姓名获取到,保存在name变量中
var hobby = $("#modal-hobby").val(); // 把用户在模态框里输入的爱好获取到,保存在hobby变量中 var $myModalEle = $("#myModal");
// 判断,按需操作
var $currentTrEle = $myModalEle.data("currentTr");
if ($currentTrEle !== undefined) {
// 说明是编辑状态
$currentTrEle.children().eq(1).text(name);
$currentTrEle.children().eq(2).text(hobby); // 清空之前保存的当前行
$myModalEle.removeData();
} else {
// 创建tr标签把数据填进去
var trEle = document.createElement("tr");
var number = $("tr").length;
$(trEle).html("<td>" + number + "</td>" +
"<td>" + name + "</td>" +
"<td>" + hobby + "</td>" +
'<td><button class="edit-btn">编辑</button> <button class="delete-btn">删除</button></td>'
);
// 把创建好的tr添加到tbody中
$("tbody").append(trEle);
}
// 隐藏模态框
closeModal();
}); // 2. 根据是编辑 还是新增 做不同的操作
// 2.1 如果是新增操作,就生成一条新的tr,加到table的最后
// 2.2 如果是编辑操作, 根据先前 编辑 按钮那一行
// 难点在于 如何确定 编辑的是哪一行? --> 利用data()可以存具体的jQuery对象 // 给每一行的编辑按钮绑定事件
// 要使用事件委托,基于已经存在的元素(页面加载完之后存在的标签)绑定事件
$("tbody").on("click", ".edit-btn", function () {
// 把模态框弹出来
showModal();
// 把原来的数据填写到模态框中的input
var $currentTrEle = $(this).parent().parent(); // 把当前行的jQuery对象保存起来
$("#myModal").data("currentTr", $currentTrEle); var name = $currentTrEle.children().eq(1).text();
var hobby = $currentTrEle.children().eq(2).text(); // 填
$("#modal-name").val(name);
$("#modal-hobby").val(hobby);
}); // 给每一行的删除按钮绑定事件
$("tbody").on("click", ".delete-btn", function () {
// 删除被点击的删除按钮的那一行
var $currentTrEle = $(this).parent().parent();
// 更新序号
// 找到当前行后面所有的tr,依次更新序号
$currentTrEle.nextAll().each(function () {
// 取到原来的序号
var oldNumber = $(this).children().first().text();
// 将原来的序号-1,再赋值回去
$(this).children().first().text(oldNumber - 1);
});
$currentTrEle.remove(); }); </script>
</body>
</html>
############### 结束线 ################
前端-jQuery-长期维护的更多相关文章
- Web前端JQuery入门实战案例
前端jquery入门到实战 为什么要学习Jquery?因为生活. 案例: <!DOCTYPE html> <html lang="zh-CN"> <h ...
- Web前端JQuery面试题(三)
Web前端JQuery面试题(三) 1.怎么阻止冒泡过程? stopPropagation(); // 阻止冒泡过程 2.ready()方法和onload()方法的区别? onload()方法要等页面 ...
- Web前端JQuery面试题(二)
Web前端JQuery面试题(二) 1.请写出jquery的语法? <script type="text/javascript"> $(document).ready( ...
- Web前端JQuery面试题(一)
Web前端JQuery面试题(一) 一:选择器 基本选择器 什么是#id,element,.class,*,selector1, selector2, selectorN? 答: 根据给定的id匹配一 ...
- 关于前端 jQuery 面试的知识点
参考一个博主整理的一些前端 jQuery 的一些面试题 参考博客:https://www.cnblogs.com/dashucoding/p/11140325.html 参考博客:https://ww ...
- C#NPOI.RabbitMQ.EF.Attribute.HttpRuntime.Cache.AD域.List<T>根据指定字段去重.前端JQuery.Cache.I18N(多语言).data-xx(自定义属性)
使用NPOI 操作Excel 个人使用的电脑基本默认安装Excel 操作起来 调用Excel的组件便可.如果是一台服务器.没有安装Excel,也就无法调用Excel组件. 在此推荐第三方插件.NPOI ...
- 前端 jQuery副本
jQuery介绍 jQuery是一个轻量级的.兼容多浏览器的JavaScript库. jQuery使用户能够更方便地处理HTML Document.Events.实现动画效果.方便地进行Ajax交互, ...
- 前端——jQuery介绍
目录 jQuery介绍 jQuery的优势 jQuery内容: jQuery版本 jQuery对象 jQuery基础语法 查找标签 基本选择器 层级选择器: 基本筛选器: 属性选择器: 表单筛选器: ...
- 前端-jQuery介绍
目录 jQuery介绍 jQuery的优势 jQuery内容: jQuery版本 jQuery对象 jQuery基础语法 查找标签 基本选择器 层级选择器: 基本筛选器: 属性选择器: 表单筛选器: ...
- Python之Web前端jQuery扩展
Python之Web前端: 一. jQuery表单验证 二. jQuery扩展 三. 滚动菜单 一. jQuery表单验证: 任何可以交互的站点都有输入表单,只要有可能,就应该对用户输入的数据进行验证 ...
随机推荐
- idea 2018.3.4 破解
我的idea_home=C:\Program Files\\IntelliJ IDEA 2018.3.4\ 1.下载破解文件 链接:https://pan.baidu.com/s/1I2APmk-pj ...
- PAT B1045 快速排序
题目如下: 1045 快速排序 (25 point(s)) 著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到 ...
- caffe fastercbnnahdemo
https://download.csdn.net/download/zefan7564/10148990 https://blog.csdn.net/qq_37124237/article/deta ...
- MyBatis+SpringMVC 框架搭建小结
前言:最近再写一款视频播放器的后台,踩了很多坑,在此总结. 设计顺序: 前提:搭建配置完好的Spring-MyBatis项目 1.流程分析,数据库设计(看似无用,真正做起来真的需要这个东西帮忙整理下思 ...
- Django模型基础(三)——关系表的数据操作
模型之间可以有三种表关系,即一对一,一对多和多对多.表关联之间的数据操作在Django中可以很方便的操作到.在模型中,表关联的字段类型是关联表的实例,而不是字段本身类型.关联字段在数据库中会在其后补上 ...
- inotifywait命令详解及安装
https://www.cnblogs.com/pyrene/p/6414724.html 安装 https://www.cnblogs.com/martinzhang/p/4126907.h ...
- python+Sqlite+Dataframe打造金融股票数据结构
5. 本地数据库 很简单的用本地Sqlite查找股票数据. DataSource类,返回的是Dataframe物件.这个Dataframe物件,在之后的业务,如计算股票指标,还需要特别处理. impo ...
- WebAPI异常捕捉处理,结合log4net日志(webapi框架)
一:异常捕捉处理 首先,在我们需要区分controller的类型.是全部基层controller,还是Apicontroller.(当然一般API框架,用的都是Apicontroller).两者异常处 ...
- java 连接mysql 示例
import java.sql.*; public class Main { // MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URL static final String JDBC ...
- PIL对象和numpy三维数组的互相转换
#https://stackoverflow.com/questions/384759/how-to-convert-a-pil-image-into-a-numpy-array from PIL i ...