jQuery之jQuery扩展和事件

一、jQuery事件

常用事件
blur([[data],fn]) 失去焦点
focus([[data],fn]) 获取焦点( 搜索框例子)
change([[data],fn]) 当select下拉框中的元素发生改变的时候触发change事件(select例子)
click([[data],fn]) 点击
dblclick([[data],fn]) 双击
scroll([[data],fn]) 滚动
submit([[data],fn]) 提交

不常用事件
error([[data],fn])
focusin([data],fn)
focusout([data],fn)
keydown([[data],fn]) 按下
keypress([[data],fn]) 按键
keyup([[data],fn]) 键松开
mousedown([[data],fn]) 鼠标按下
mouseenter([[data],fn]) 鼠标移进去
mouseleave([[data],fn]) 鼠标离开:只有鼠标离开被选元素的时候,才会触发mouseleave事件
mousemove([[data],fn]) 鼠标移动
mouseout([[data],fn]) 鼠标离开:无论鼠标离开被选元素还是任何子元素,都会触发mouseout事件
mouseover([[data],fn] 鼠标悬停
mouseup([[data],fn]) 鼠标弹起
resize([[data],fn]) 元素窗口发生变化
select([[data],fn])
unload([[data],fn])
补充:
文档树加载完之后绑定事件(绝大多数情况下)
第一种:吧script放在后面。
第二种:
$(document).ready(function(){
// 绑定事件的代码
....
})

简写:
$(function($){
// 绑定事件的代码
....
});
事件练习
 1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4     <meta charset="UTF-8">
5     <title>常用事件</title>
6 </head>
7 <body>
8 <input type="text" name="search" value="苹果手机" data-show ="">
9 <button>搜索</button>
10 <select name="" id="s1">
11     <option value="gansu">甘肃</option>
12     <option value="wuwei">武威</option>
13     <option value="dingxi">定西</option>
14     <option value="longxi">陇西</option>
15     <option value="dalian">大连</option>
16 </select>
17 <script src="jquery-3.2.1.min.js"></script>
18 <script>
19 //    focus和blur事件
20 $(document).ready(function () {
21     //文档加载完之后执行下面的代码
22      $(":input").focus(function () {
23         var data = $(this).val();
24         $(this).val("");
25         $(this).attr("data-show", data);
26 
27     });
28     $(":input").blur(function () {
29         $(this).val($(this).attr("data-show"));
30     });
31     $("#s1").change(function () {
32 //        当你的下拉框改变的时候就触发这个事件,就会执行下面的代码
33         console.log($(this).val())
34     })
35 });
36 
37 </script>
38 </body>
39 </html>
focus和blur练习
 1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4     <meta charset="UTF-8">
5     <title>onmouse事件</title>
6     <style>
7         .box{
8             width: 300%;
9             height: 200px;
10         }
11         .title{
12             background: steelblue;
13             line-height: 40px;
14         }
15         .con{
16             background: slategray;
17             line-height: 30px;
18         }
19         .hide{
20             display: none;
21         }
22     </style>
23 </head>
24 <body>
25 <div class="box">
26     <div class="title">onmouse</div>
27     <div class="con hide">
28         <div><a href="" class="item">你好吗?</a></div>
29         <div><a href="" class="item">我好啊</a></div>
30         <div><a href="" class="item">好就好呗</a></div>
31     </div>
32 </div>
33 <script>
34     var ele_title = document.getElementsByClassName('title')[0];
35     var ele_box = document.getElementsByClassName('box')[0];
36     //鼠标指上去的事件
37     ele_title.onmouseover = function () {
38         this.nextElementSibling.classList.remove('hide');
39     };
40     //鼠标移走的事件的两种方式
41 //    方式一(推荐)
42      ele_box.onmouseleave= function () {
43         ele_title.nextElementSibling.classList.add('hide');
44     };
45 //    方式二
46 //    ele_title.onmouseout = function () {
47 //       this.nextElementSibling.classList.add('hide');
48 //    }
49 //    方式一和方式二的区别:
50 //    不同点
51 //      onmouseout:不论鼠标指针离开被选元素还是任何子元素,都会触发onmouseout事件
52 //      onmouseleave:只有在鼠标指针离开被选元素时,才会触发onmouseleave事件
53 //    相同点:都是鼠标移走触发事件
54 </script>
55 </body>
56 </html>
mouseleave和mouseout练习

二、jQuery扩展(很重要!!)

1、jQuery扩展语法

把扩展的内容就可以写到xxxx.js文件了,在主文件中直接导入就行了。

用法1、$.xxx()
$.extend({
"GDP": function () {
console.log("戴小红花");
}
});
- 给jQuery添加扩展
- $.GDP()

用法2、$("").xxx()
$.fn.extend({
"BJG": function () {
console.log("英语八级就是好!");
}
})
- 给jQuery对象添加扩展
- $(":input").BJG()

2、练习1

  第一步:不完美

extend.js文件

$.extend({
"GDP":function () {
foo();
console.log("带小红花")
}
});
那么如果这样定义一个函数,其他的扩展都可以调用这个函数了
这个函数只想在自己调用。不想让它公共的调用,不让他起冲突
那么定义一个私有的。用一个匿名函数
function foo() {
console.log("英语八级就是牛")
}
$.fn.extend({
"BJG":function () {
foo()
console.log("就这样吧")
}
});

  继续第二步:加上匿名函数

匿名函数:foo方法只想自己用,不想让别人调用
(function () {
$.extend({
"GDP":function () {
foo();
console.log("带小红花")
}
});
function foo() {  函数的内部可以调用,外部就不可以调用了
console.log("英语八级就是牛")
}
})();
(function () {
$.fn.extend({
"BJG":function () {
foo2();
console.log("就这样吧")
}
});
function foo2() {
console.log("哎哎呀")
}
})();

  第三步、越趋于完美:既不可以让别人在外部随意调用,也可以避免别人修改$

// 如果怕$被别人改,那么就传个参数进去
(function (jq) {
jq.extend({
"GDP":function () {
foo();
console.log("带小红花")
},   //可以扩展多个(加上逗号在写几个)
"SGS":function () {
console.log("你蛤蟆")
}
});
function foo() {
console.log("英语八级就是牛")
}
})(jQuery);
(function (jq) {
jq.fn.extend({
"BJG":function () {
foo2();
console.log("就这样吧")
}
});
function foo2() {
console.log("哎哎呀")
}
})(jQuery);

extend.html文件

 

 

3、具体示例练习(登录校验)

login.html文件

 1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4     <meta charset="UTF-8">
5     <title>作业1</title>
6     <link rel="stylesheet" href="bootstrap-3.3.7-dist/css/bootstrap.min.css">
7     <style>
8         .container {
9             margin-top: 50px;
10         }
11     </style>
12 </head>
13 <body>
14 <div class="container">
15     <div class="row">
16         <div class="col-md-4 col-md-offset-4">
17             <form action="" novalidate>
18                 <div class="form-group">
19                     <label for="username">用户名</label>
20                     <input type="text" class="form-control" id="username" placeholder="username">
21                     <span id="helpBlock" class="help-block"></span>
22                 </div>
23                 <div class="form-group">
24                     <label for="Password">密码</label>
25                     <input type="password" class="form-control" id="Password" placeholder="Password">
26                     <span id="helpBlock2" class="help-block"></span>
27                 </div>
28                 <button type="submit" class="btn btn-default submit">提交</button>
29             </form>
30         </div>
31     </div>
32 </div>
33 <!--jQuery导入一定要放到js的上面-->
34 <script src="jquery-3.2.1.min.js"></script>
35 <script src="bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
36 <script>
37 //    var span =$("span");
38     $(".submit").on("click",function () {
39         //先清空状态
40         $("form .form-group").removeClass("has-error");
41         $("form span").text("");
42         $(":input").each(function () {
43             if ($(this).val().length===0){
44                 var name =  $(this).prev().text();
45                 $(this).parent().addClass("has-error");
46                 $(this).next().text(name "不能为空");
47                 return false
48             }
49         });
50     return false
51     })
52 
53 
54 </script>
55 </body>
56 </html>
View Code

loginextend.js 文件

// 匿名函数
(function (jq) {  //jq就相当于$
jq.extend({
"myValidate": function (form) {
var formObj = jq(form) ;//赋一个变量,因为我们经常用到  
                      这里的form参数就指的是在html文件里面传进去的"#login",也就是找到的form标签
            formObj.find(":submit").on("click", function () {
//先清空状态
formObj.find(".form-group").removeClass("has-error");
formObj.find("span").text("");
formObj.find(":input").each(function () {
if ($(this).val().length === 0) {
var name = $(this).prev().text();
$(this).parent().addClass("has-error");
$(this).next().text(name   "不能为空");
return false
}
});
return false
});
}
})
})(jQuery);

loginextend2.js 文件

/**
* Created by Administrator on 2017/10/17.
*/
// 匿名函数
(function (jq) {
jq.fn.extend({
"myValidate": function (arg) {
console.log(this);  //就是当前的.前面的jQuery对象 $("#login")  ----->也就是[form#login]
var formObj = this;//赋一个变量,因为我们经常用到
formObj.find(":submit").on("click", function () {
// this --->提交的submit
//先清空状态
formObj.find(".form-group").removeClass("has-error");
formObj.find("span").text("");
//each循环
var flag = true;  //设置一个标志位
// 找到input的属性[required=true]的,然后设置相关的操作
formObj.find("input[required=true]").each(function () {
var inputID = jq(this).attr("id");  //获取input的id属性值  "username"
var minlength = arg[inputID]["min-length"];  //arg[inputID]["min-length"]--->arg["username"]["min-length"]--->得到6
if ($(this).val().length === 0) {
//而这里的this是当前的input框,和上面的不是同一个
var name = $(this).prev().text();
$(this).parent().addClass("has-error");
$(this).next().text(name   "不能为空");
flag =  false;
return flag
}
if (minlength!==undefined){
if (jq(this).val().length<minlength){
var name = $(this).prev().text();
$(this).parent().addClass("has-error");
$(this).next().text(name   "长度太短");
flag =  false;
return flag
}
}
});
return flag
});
}
})
})(jQuery);

三、表格的添加 | 删除 | 编辑示例

第一种:点击编辑没有模态框,是input框编辑修改

  1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4     <meta charset="UTF-8">
5     <title>增删改</title>
6     <link rel="stylesheet" href="bootstrap-3.3.7-dist/css/bootstrap.min.css">
7     <style>
8         .addBtn {
9             margin-top: 30px;
10             margin-bottom: 15px;
11         }
12     </style>
13 </head>
14 <body>
15 <div class="container">
16     <div class="row">
17         <div class="col-md-9 col-md-offset-2">
18             <!-- Button trigger modal -->
19             <button type="button" class="btn btn-primary btn-mg addBtn" data-toggle="modal" data-target="#myModal">
20                 添加学生的信息
21             </button>
22             <table class="table table-striped">
23                 <tbody>
24                 <tr>
25                     <th>姓名</th>
26                     <th>年龄</th>
27                     <th>性别</th>
28                     <th>操作</th>
29                 </tr>
30                 <tr>
31                     <td  class="col-md-3">六点</td>
32                     <td  class="col-md-3">23</td>
33                     <td  class="col-md-3">女</td>
34                     <td>
35                         <button class="btn btn-success editBtn">编辑</button>
36                         <button class="btn btn-danger delBtn">删除</button>
37                     </td>
38                 </tr>
39                 <tr>
40                     <td>时时彩</td>
41                     <td>24</td>
42                     <td>女</td>
43                     <td>
44                         <button class="btn btn-success editBtn">编辑</button>
45                         <button class="btn btn-danger delBtn">删除</button>
46                     </td>
47                 </tr>
48                 <tr>
49                     <td>刚强</td>
50                     <td>13</td>
51                     <td>男</td>
52                     <td>
53                         <button class="btn btn-success editBtn">编辑</button>
54                         <button class="btn btn-danger delBtn">删除</button>
55                     </td>
56                 </tr>
57                 </tbody>
58             </table>
59         </div>
60     </div>
61 </div>
62 
63 
64 <!-- Modal模态框 -->
65 <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
66     <div class="modal-dialog" role="document">
67         <div class="modal-content">
68             <div class="modal-header">
69                 <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span>
70                 </button>
71                 <h4 class="modal-title" id="myModalLabel">Modal title</h4>
72             </div>
73             <div class="modal-body">
74                 <form>
75                     <div class="form-group">
76                         <label for="username">姓名</label>
77                         <input type="text" class="form-control item" id="username" placeholder="username">
78                     </div>
79                     <div class="form-group">
80                         <label for="age">年龄</label>
81                         <input type="text" class="form-control item" id="age" placeholder="age">
82                     </div>
83                     <div class="form-group">
84                         <label for="gender">性别</label>
85                         <input type="text" class="form-control item" id="gender" placeholder="gender">
86                     </div>
87                 </form>
88             </div>
89             <div class="modal-footer">
90                 <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
91                 <button type="button" class="btn btn-primary queding">确定</button>
92             </div>
93         </div>
94     </div>
95 </div>
96 <script src="jquery-3.2.1.min.js"></script>
97 <script src="bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
98 <script>
99     //添加信息
100     $(".queding").on("click",function () {
101         arr=[];
102         $(".item").each(function () {
103 //            console.log($(this).val()) //返回的是input框里面输入的内容
104             var ele_v = $(this).val();
105             arr.push(ele_v); //吧拿到的值添加到数组
106         });
107         var s ='<tr><td>' arr[0] '</td><td>' arr[1] '</td><td>' arr[2] '</td><td><button class="btn btn-success editBtn">编辑</button><button class="btn btn-danger delBtn">删除</button></td></tr>';
108         $("tbody").append(s);
109         $("#myModal").modal("hide")
110     });
111 
112     //删除信息
113 //    方式一
114     $("tbody").on("click",".delBtn",function (e) {  //事件委派
115         if (e.target.className=='btn btn-danger delBtn'){
116             //找到要删除的行
117             // console.log(e.target.parentElement.parentElement);
118            e.target.parentElement.parentElement.remove()
119         }
120     });
121 
122 //    方式二
123        $("tbody").on("click",".delBtn",function () {  //事件委派
124            $(this).parent().parent().remove()  //这里的
125         });
126 
127     //编辑信息
128 
129     $("tbody").on("click",".editBtn",function () {
130          var tds = $(this).parent().prevAll();
131          tds.each(function () {
132             $(this).html('<input type="text" value='  $(this).text()  '>')
133         });
134 
135         $(this).text("保存");
136         $(this).removeClass("btn btn-success editBtn");
137         $(this).addClass("btn btn-info saveBtn")
138     });
139 
140     $("tbody").on("click",".saveBtn",function () {
141         var tds = $(this).parent().prevAll();
142         console.log(tds);
143         tds.each(function (){
144 //            $(this).text(this.firstElementChild.value);
145             $(this).text($(this).children().first().val());
146             console.log()
147         });
148         $(this).text("编辑");
149         $(this).removeClass("btn btn-info saveBtn");
150         $(this).addClass("btn btn-success editBtn");
151     });
152 
153 
154 </script>
155 </body>
156 </html>
增删改1

第二种:点击编辑有模态框

  1 <!DOCTYPE html>
2 <!-- saved from url=(0041)http://v3.bootcss.com/examples/dashboard/ -->
3 <html lang="zh-CN">
4 <head>
5     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
6 
7     <meta http-equiv="X-UA-Compatible" content="IE=edge">
8     <meta name="viewport" content="width=device-width, initial-scale=1">
9     <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
10     <meta name="description" content="">
11     <meta name="author" content="">
12     <link rel="icon" href="http://v3.bootcss.com/favicon.ico">
13 
14     <title>Dashboard Template for Bootstrap</title>
15 
16     <!-- Bootstrap core CSS -->
17     <link href="./Dashboard_files/bootstrap.min.css" rel="stylesheet">
18 
19     <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
20     <link href="./Dashboard_files/ie10-viewport-bug-workaround.css" rel="stylesheet">
21 
22     <!-- Custom styles for this template -->
23     <link href="./Dashboard_files/dashboard.css" rel="stylesheet">
24 
25     <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
26     <!--[if lt IE 9]>
27     <script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
28     <script src="Dashboard_files/ie-emulation-modes-warning.js"></script>
29 
30     <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
31     <!--[if lt IE 9]>
32     //cdn导入css样式
33     <script src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
34     <script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
35     <![endif]
36     <!--<link rel="stylesheet" href="bootstrap-3.3.7-dist/css/bootstrap.min.css">-->
37 
38 
39     <style>
40         .menu {
41             margin: 0 -20px;
42             border-bottom: 1px solid #336699;
43         }
44 
45         .head {
46             padding: 15px;
47         }
48 
49         .my-table-tool {
50             margin-bottom: 15px;
51         }
52 
53         .menu .nav-sidebar > li > a {
54             padding-right: 40px;
55             padding-left: 40px;
56         }
57     </style>
58 
59 </head>
60 
61 <body>
62 
63 <nav class="navbar navbar-inverse navbar-fixed-top">
64     <div class="container-fluid">
65         <div class="navbar-header">
66             <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar"
67                     aria-expanded="false" aria-controls="navbar">
68                 <span class="sr-only">Toggle navigation</span>
69                 <span class="icon-bar"></span>
70                 <span class="icon-bar"></span>
71                 <span class="icon-bar"></span>
72             </button>
73             <a class="navbar-brand" href="http://v3.bootcss.com/examples/dashboard/#左侧菜单.html">Project name</a>
74         </div>
75         <div id="navbar" class="navbar-collapse collapse">
76             <ul class="nav navbar-nav navbar-right">
77                 <li><a href="http://v3.bootcss.com/examples/dashboard/#左侧菜单.html">Dashboard</a></li>
78                 <li><a href="http://v3.bootcss.com/examples/dashboard/#左侧菜单.html">Settings</a></li>
79                 <li><a href="http://v3.bootcss.com/examples/dashboard/#左侧菜单.html">Profile</a></li>
80                 <li><a href="http://v3.bootcss.com/examples/dashboard/#左侧菜单.html">Help</a></li>
81             </ul>
82             <form class="navbar-form navbar-right">
83                 <input type="text" class="form-control" placeholder="Search...">
84             </form>
85         </div>
86     </div>
87 </nav>
88 <!--左侧菜单-->
89 <div class="container-fluid">
90     <div class="row">
91         <div class="col-sm-3 col-md-2 sidebar">
92 
93             <div class="menu">
94                 <div class="head bg-primary">菜单一</div>
95                 <ul class="nav nav-sidebar">
96                     <li class=""><a href="http://v3.bootcss.com/examples/dashboard/#左侧菜单.html">Overview <span
97                             class="sr-only">(current)</span></a>
98                     </li>
99                     <li><a href="http://v3.bootcss.com/examples/dashboard/#左侧菜单.html">Reports</a></li>
100                     <li><a href="http://v3.bootcss.com/examples/dashboard/#左侧菜单.html">Analytics</a></li>
101                     <li><a href="http://v3.bootcss.com/examples/dashboard/#左侧菜单.html">Export</a></li>
102                 </ul>
103             </div>
104 
105             <div class="menu">
106                 <div class="head  bg-primary">菜单二</div>
107                 <ul class="nav nav-sidebar">
108                     <li><a href="http://v3.bootcss.com/examples/dashboard/左侧菜单.html">Nav item</a></li>
109                     <li><a href="http://v3.bootcss.com/examples/dashboard/左侧菜单.html">Nav item again</a></li>
110                     <li><a href="http://v3.bootcss.com/examples/dashboard/左侧菜单.html">One more nav</a></li>
111                     <li><a href="http://v3.bootcss.com/examples/dashboard/左侧菜单.html">Another nav item</a></li>
112                     <li><a href="http://v3.bootcss.com/examples/dashboard/左侧菜单.html">More navigation</a></li>
113                 </ul>
114             </div>
115 
116             <div class="menu">
117                 <div class="head  bg-primary">菜单三</div>
118                 <ul class="nav nav-sidebar">
119                     <li><a href="http://v3.bootcss.com/examples/dashboard/左侧菜单.html">Nav item again</a></li>
120                     <li><a href="http://v3.bootcss.com/examples/dashboard/左侧菜单.html">One more nav</a></li>
121                     <li><a href="http://v3.bootcss.com/examples/dashboard/左侧菜单.html">Another nav item</a></li>
122                 </ul>
123             </div>
124         </div>
125     </div>
126 </div>
127 <!--表格-->
128 <div class="container">
129     <div class="row">
130         <div class="col-md-10 col-md-offset-2">
131             <!-- Button trigger modal -->
132             <button type="button" class="btn btn-primary btn-mg addBtn" data-toggle="modal" data-target="#myModal">
133                 添加学生的信息
134             </button>
135             <table class="table table-striped">
136                 <thead>
137                 <tr>
138                         <th>学号</th>
139                         <th>姓名</th>
140                         <th>年龄</th>
141                         <th>性别</th>
142                         <th>操作</th>
143                     </tr>
144                 </thead>
145                 <tbody>
146                     <tr>
147                         <td  class="col-md-2">1</td>
148                         <td  class="col-md-2">李欣</td>
149                         <td  class="col-md-2">23</td>
150                         <td  class="col-md-2">女</td>
151                         <td>
152                             <button class="btn btn-success editBtn">编辑</button>
153                             <button class="btn btn-danger delBtn">删除</button>
154                         </td>
155                     </tr>
156                     <tr>
157                         <td>2</td>
158                         <td>时时彩</td>
159                         <td>24</td>
160                         <td>女</td>
161                         <td>
162                             <button class="btn btn-success editBtn">编辑</button>
163                             <button class="btn btn-danger delBtn">删除</button>
164                         </td>
165                     </tr>
166                     <tr>
167                         <td>3</td>
168                         <td>刚强</td>
169                         <td>13</td>
170                         <td>男</td>
171                         <td>
172                             <button class="btn btn-success editBtn">编辑</button>
173                             <button class="btn btn-danger delBtn">删除</button>
174                         </td>
175                     </tr>
176                     <tr>
177                     <td>4</td>
178                     <td>杜康</td>
179                     <td>25</td>
180                     <td>男</td>
181                     <td>
182                         <button class="btn btn-success editBtn">编辑</button>
183                         <button class="btn btn-danger delBtn">删除</button>
184                     </td>
185                 </tr>
186                 </tbody>
187             </table>
188         </div>
189     </div>
190 </div>
191 <!--模态框-->
192 <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
193     <div class="modal-dialog" role="document">
194         <div class="modal-content">
195             <div class="modal-header">
196                 <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span>
197                 </button>
198                 <h4 class="modal-title" id="myModalLabel">学生信息</h4>
199             </div>
200             <div class="modal-body">
201                 <form>
202                     <div class="form-group">
203                         <label for="modal-username">姓名</label>
204                         <input type="text" class="form-control item" id="modal-username" placeholder="username">
205                     </div>
206                     <div class="form-group">
207                         <label for="modal-age">年龄</label>
208                         <input type="text" class="form-control item" id="modal-age" placeholder="age">
209                     </div>
210                     <div class="form-group">
211                         <label for="modal-gender">性别</label>
212                         <input type="text" class="form-control item" id="modal-gender" placeholder="gender">
213                     </div>
214                 </form>
215             </div>
216             <div class="modal-footer">
217                 <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
218                 <button type="button" class="btn btn-primary queding">确定</button>
219             </div>
220         </div>
221     </div>
222 </div>
223 <!-- Bootstrap core JavaScript
224 ================================================== -->
225 <script src="jquery-3.2.1.min.js"></script>
226 <!-- Placed at the end of the document so the pages load faster -->
227 <!--<script src="Dashboard_files/jquery.min.js"></script>-->
228 <!--<script>window.jQuery || document.write('<script src="../../assets/js/vendor/jquery.min.js"><\/script>')</script>-->
229 <!--<script src="Dashboard_files/bootstrap.min.js"></script>-->
230 <!-- Just to make our placeholder images work. Don't actually copy the next line! -->
231 <script src="Dashboard_files/holder.min.js"></script>
232 <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
233 <script src="Dashboard_files/ie10-viewport-bug-workaround.js"></script>
234 
235 <script src="bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
236 <script>
237     //左侧菜单
238     $(".head").on("click", function () {
239         // 兄弟标签 紧挨着的ul标签 隐藏  addClass("hide")
240         $(this).parent().siblings().children("ul").slideUp();
241         // 把自己 紧挨着的ul标签显示  removeClass("hide")
242 //        $(this).next().removeClass("hide");
243         $(this).next().slideToggle();
244     });
245 
246     //删除按钮
247     $("tbody").on("click","td>.btn-danger",function () {
248         $(this).parent().parent().remove()
249     });
250     //编辑
251     $("tbody").on("click",".editBtn",function () {//事件委派
252          //弹出模态框
253         //alert(123)
254         $("#myModal").modal("show");
255         //给模态框赋值
256         //1、先取值
257         var tds = $(this).parent().parent().children();
258         var username = tds.eq(1).text();
259         var age = tds.eq(2).text();
260         var danger = tds.eq(3).text();
261         //2、后赋值
262         $("#modal-username").val(username);
263         $("#modal-age").val(age);
264         $("#modal-gender").val(danger);
265         //吧tds保存到myModal的data(先把数据保存下来)
266         $("#myModal").data("tds",tds);
267         console.log(tds);
268 //        console.log($("#myModal").data("tds"));
269         });
270         //点击模态框中的确定按钮,增加事件
271         $(".queding").on("click",function () {
272             //1、隐藏模态框
273             $("#myModal").modal("hide");
274             //2、更新td的值0
275             //取值
276             var username = $("#modal-username").val();
277             var age = $("#modal-age").val();
278             var denger = $("#modal-gender").val();
279 //                赋值
280             //拿到你点击的哪一行
281             var tds = $("#myModal").data("tds");
282             console.log(tds);
283             if (tds === undefined) {
284                 //因为添加和编辑共用一个模态框,所以先分开判断一下
285                 //当tds在模态框中没有值的时候,就实现添加的功能,如果有数据,就做编辑的功能
286                 var tr1 = document.createElement("tr");
287                 //第一个是td的序号
288                 $(tr1).append("<td>"   $("tbody tr").length 1   "</td>");
289                 console.log($("tbody tr").length);
290 //             第二个是username
291                 $(tr1).append('<td>'   username   '</td>');
292                 $(tr1).append('<td>'   age   '</td>');
293                 $(tr1).append('<td>'   denger   '</td>');
294 //             最后加按钮(找到tbody下的第一行,再从第一行中找到td最后一个td,然后克隆)
295 //
296                 var s = $("tbody tr:last").find("td").last();
297                 var ss = s.clone(true);
298                 $(tr1).append(ss);
299                 $("tbody").append(tr1);
300             } else {
301                 console.log(tds);   //这里的tds就是上面用data保存下来的每一列里面的内容
302                 tds.eq(1).text(username);
303                 tds.eq(2).text(age);
304                 tds.eq(3).text(denger);
305                 $("#myModal").removeData("tds")
306             }
307         });
308                  //给添加按钮增加事件
309             $(".addBtn").on("click",function () {
310                 //当点击添加按钮的时候把模态框里面的..内容清空
311                 $("#myModal :input").val("");
312             });
313 </script>
314 </body>
315 </html>
增删改2

 补充一个知识点 data

- .data()
- .data("key", value) 保存值,value可以是字符串,也可以是数组,也可以是jquery对象
- .data("key") 获取值(没有值就返回undefined)
- .removeData() 删除所有

- .removeData("key") 删除key对应的value

 

 


更多专业前端知识,请上 【猿2048】www.mk2048.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361145.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaFX列表示例

这是使用JavaFX构建的示例列表应用程序。 该应用程序是待办事项列表。 此应用程序具有添加&#xff0c;更新和删除列表中项目的功能。 列表数据存储在HSQLDB关系数据库中。 该应用程序使用JDBC&#xff08;Java数据库连接&#xff09;API访问数据库。 该应用程序打包为可执行JA…

flex弹性布局操练2

上一个是练习的1个内元素的&#xff0c;这次练习两个元素的。 ul.box1 {list-style:none;background-color:black;display:flex;justify-content:space-between;/*水平轴的位置,默认是flex-start就是第一种情况*/align-items:center;/*垂直轴的位置*/width:100px;height:100px;…

Selenium1 Selenium2 WebDriver

内容摘要&#xff1a; Selenium 1 原理WebDriver WebDriver 组件WebDriver 协议 Remote End 处理流程Commands & Endpoints & 请求路由错误消息 WebDriver 配置 Selenium 2 1、Selenium 1 原理 (1).测试用例&#xff08;Testcase&#xff09;通过Client Lib的接口向Se…

Fork / Join框架vs并行流vs.ExecutorService:最终的Fork / Join基准

Fork / Join框架在不同配置下如何工作&#xff1f; 就像即将上映的《星球大战》一样&#xff0c;围绕Java 8并行性的批评也充满了兴奋。 并行流的语法糖带来了一些炒作&#xff0c;就像我们在预告片中看到的新型光剑一样。 现在&#xff0c;有了许多使用Java进行并行处理的方法…

CSRF攻击与防御

CSRF是什么 CSRF在百度百科中是这么说的&#xff1a;“CSRF&#xff08;Cross-site request forgery跨站请求伪造&#xff0c;也被称为“one click attack”或者session riding&#xff0c;通常缩写为CSRF或者XSRF&#xff0c;是一种对网站的恶意利用。尽管听起来像跨站脚本&a…

Silverlight学习笔记(九)-----RenderTransform特效【五种基本变换】及【矩阵变换MatrixTransform】...

RenderTransform特效&#xff1a; 变形&#xff08;RenderTransform&#xff09;类是为了达到直接去改变某个Silverlight对象的形状&#xff08;比如缩放、旋转一个元素&#xff09;的目的而设计的&#xff0c;RenderTransform包含的变形属性成员就是专门用来改变Silverlight对…

React 篇 Search Bar and content Table

我们要构建一个模块&#xff0c;其中包含一个内容显示的表格&#xff0c;然后上面有一个提供Search的栏位&#xff0c;并对Search中输入栏进行监听&#xff0c;当有改变的时候&#xff0c;触发Search然后对内容表中的内容进行过滤。 Demo Link:http://czrmodel.mybluemix.net/…

PrimeFaces:在动态生成的对话框中打开外部页面

我已经在即将出版的PrimeFaces Cookbook 2版中写了一篇关于食谱的博客。 在这篇文章中&#xff0c;我想发表第二篇关于一个名为Dialog Framework的小型框架的文章。 我个人喜欢它&#xff0c;因为我记得我为使用Struts框架付出同样的努力而付出的代价。 当您想将外部页面加载到…

vue-router之 beforeRouteEnter

beforeRouteEnter在每次路由切换都执行 ,而项目优化后,切换路由mounted只在最开始执行一次beforeRouteEnter的具体用法可参考官方文档 https://cn.vuejs.org/v2/guide/migration-vue-router.html#activate-替换 需要注意的是&#xff1a;在这期间路由跳转携带的数据发生改变会影…

突破极限–如何将AeroGear Unified Push用于Java EE和Node.js

在2014年底的AeroGear队宣布红帽的JBoss统一推送服务器的可用性xPaaS 。 让我们仔细看看&#xff01; 总览 统一推送服务器允许开发人员将本地推送消息发送到Apple的推送通知服务&#xff08;APNS&#xff09;和Google的云消息传递&#xff08;GCM&#xff09;。 它具有一个内…

js 获取json数组里面数组的长度

作为一个前端页面开发者第一次处理json数据&#xff0c;遇到了‘js 获取json数组里面数组的长度’&#xff1f;竟然不知道 json没有.length属性&#xff08;真是要嘲讽下自己&#xff09;&#xff0c;少壮不努力老大徒伤悲啊&#xff01;以前都是去寻求男朋友帮助&#xff0c;但…

针对WildFly和EAP运行Java Mission Control和Flight Recorder

Java Mission Control &#xff08;JMC&#xff09;使您可以监视和管理Java应用程序&#xff0c;而无需引入通常与这些类型的工具相关的性能开销。 它使用为正常的JVM动态优化而收集的数据&#xff0c;从而形成了一种非常轻量级的方法来观察和分析应用程序代码中的问题。 JMC由…

C#堆栈和堆的讲解

OS和CLR通常将用于容纳数据的内存划分为两个独立的区域&#xff0c;每个区域都采用截然不同的方式来管理&#xff1a;堆栈&#xff08;Stack&#xff09;和堆&#xff08;heap&#xff09;。&#xff08;1&#xff09; 调用一个方法时&#xff0c;它的参数以及它的局部变…

jQuery中的常用内容总结(一)

jQuery中的常用内容总结(一) 前言 不好意思(✿◠‿◠)&#xff0c;由于回家看病以及处理一些其它事情耽搁了&#xff0c;不然这篇博客本该上上周或者上周写的&#xff1b;同时闲谈几句&#xff1a;在这里建议各位开发的童鞋&#xff0c;如果有疾病尽快治疗&#xff0c;不要拖&a…

线程魔术技巧:Java线程可以做的5件事

Java线程最鲜为人知的事实和用例是什么&#xff1f; 有些人喜欢爬山&#xff0c;有些人喜欢跳伞。 我&#xff0c;我喜欢Java。 我喜欢它的一件事是&#xff0c;您永不停止学习。 您每天使用的工具通常可以向您展示全新的方面&#xff0c;以及您还没有机会看到的方法和有趣的用…

强制删除tfs未迁入项的两个方法。

方法1&#xff1a; 打开Vs2008的命令提示&#xff1a; 查看用户的工作区&#xff1a; 输入&#xff1a; Tf workspaces /owner:所有者或* /server:服务器名称或IP ex: tf workspaces /owner:stcct(所有者) /server:203.156.1.100(Ip地址) 删除用户的未迁入项&#xff1a; 输…

点击左侧跳到右侧

效果图 JS部分 function moveOption(e1, e2){ try{ for(var i0;i<e1.options.length;i ){ if(e1.options[i].selected){ var e e1.options[i]; e2.options.add(new Option(e.text, e.value)); e1.remove(i); iii-1 } } } catch(e){}} HTML以及CSS部分 <for…

IDC关于使用JBoss Fuse的商业价值的报告(与Apache Camel一起使用)

这只是一篇博客文章&#xff0c;具有更多的商业性质&#xff0c;但是您不能一无所有。 实际上&#xff0c;这也是使Apache Camel保持活力并保持良好状态的原因&#xff0c;这还归功于其商业上的成功。 希望从JBoss Fuse之类的产品中寻找有关在商业上使用Apache Camel的附加值的…

Spring-Quartz (一)

摘自&#xff1a; http://www.blogjava.net/Jay2009/archive/2009/03/25/259176.htmlSpring为创建Quartz的Scheduler、Trigger和JobDetail提供了便利的FactoryBean类&#xff0c;以便能够在Spring 容器中享受注入的好处。此外Spring还提供了一些便利工具类直接将Spring中的Bean…

在Java EE 7上骑骆驼–带有Swagger文档的REST服务

骆驼开箱即用。 Swagger集成就是其中之一。 不幸的是&#xff0c;大多数已经存在的功能都严重依赖于Spring。 但这并不能阻止我们在普通的Java EE 7应用程序中使用它们&#xff0c;因为有时它只是服务器的轻量级变体。 但我不想再对此进行讨论。 相反&#xff0c;我认为在所有情…