python-day59--前端 jQuery

时间:2022-04-25 21:45:45

一、什么是jQuery?          http://jquery.cuishifeng.cn/

类似Python里面的模块

是js的一个库/插件/工具

二、JS和jQuery的关系

- jQuery就是JS写的
    - JS是基础,jQuery是工具

三、为什么要用jQuery?

短小、精悍,写起来简单,省事儿,开发效率高,兼容性好

四、jQuery介绍

    - 版本
- 1.x
兼容IE8及8以前版本
- 3.x
兼容最新浏览器
- .min.xx
压缩的
生产环境用
- 没有压缩的
开发用

五、如何使用jQuery?

    - 1. 导入 <script src="jquery-3.2.1.js"></script>      对比python: import re
- 2. jQuery.xxxxx --> $('')   $等于jQuery     对比python: re.xxxx
   注意:要先导入jQuery ,再导入js ,因为bootstrap里的js内引用了jQuery的方

六、jQuery知识点:   http://jquery.cuishifeng.cn/

jQuery知识点:

    - HTML:裸体的人
- CSS :穿上衣服
- JS :动起来 给GDP戴上绿帽子 让八级哥和GDP比长短 找到比翔哥还短的人 在全班找不仅短还细的人 总结:找到谁, 然后让谁做什么 找到标签,修改标签

 1. 找 -  用jQuery找到目的标签

- 选择器           语法规则:$("xxx")

          基本选择器:

            - ID选择器                   $("#id的值")
- 类选择器(class) $(".class的值")
- 标签选择器(html标签) $("标签的名字")
- 所有标签 $("*") - 组合选择器 $("xx,xxx") 层级选择器 - 从一个标签的子子孙孙去找 $("父亲 子子孙孙")
- 从一个标签的儿子里面找 $("父亲>儿子标签")
- 找紧挨着的标签 $("标签+下面紧挨着的那个标签")
- 找后面所有同级的 $("翔哥~女人") -jQuery对象:
            - 用jQuery选择器查出来的就是jQuery对象
            - jQuery对象,他就可以使用jQuery方法,不能使用DOM的方法
          
            - DOM对象和jQuery对象转换:
                - $(".c1")[0] --> DOM对象
                - $(DOM对象)  --> jQuery对象 - 常用的筛选器
            - 写在引号里面的
            
                $(" :first")     第一个
                $(" :not('')")   非
                $(" :eq()")     索引等于
                $(" :gt()")     大于等于索引
                $(" :last")     最后一个
                
                内容                 $(" :has('')")    有
                
                可见性
                $(" :hidden)     隐藏的
                
                属性
        
                input[type='password']  --> 类型是password的input标签
                
                表单
                :input
                :text
                :password
                :checkbox
                :radio
                :submit
                :button
                :image
                :file
                
                表单对象属性
                :enable     可以用的标签
                :disable    不可以选的标签
                :checked    选中的标签
                :selected   下拉框选中的标签
            
            - 写在引号外面当方法用的
            
              过滤
                $("").first()
                $("").last()
                $("").eq()
                $("").hasClass()
                
              查找
                .children()
                .find()
                .next()
                .nextAll()
                .nextUntil()   不包含括号内的标签
                
                .parent()
                .parents()
                .parentsUntil()    不包含括号内的标签
                
                .prev()
                .prevAll()
                .prevUntil()
                
                .siblings()

 2.属性操作

    一 、属性
如果你的选择器选出了多个对象,那么默认只会返回第一个的属性 1. .attr(x)
- 一个参数 获取属性的值
 .attr(x,y)
- 两个参数 设置属性的值
- 应用练习1 点击加载图片
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>点击加载图片</title>
<style>
img{
height: 600px;
width: 800px;
}
</style>
</head>
<body> <img src="xxx.png" alt="美女" data-src="Bootstrap_i1.png"> <script src="jquery-3.2.1.js"></script>
<script>
$("img").on("click", function () {
var imgPath = $(this).attr("data-src");
$(this).attr("src", imgPath)
}) </script>
</body>
</html>

图片省流量模式

- 应用场景2  从数据库中取数据时,往往id都是不连续的,那么我们在表格中存数据的时候
就把数据库中的id存到表格下的tr标签中方便到数据库中取数据,并且不与表格中的id冲突,方便以后到数据库中找数据
 存:tr.attr("data-id",111)
 取:tr.attr("data-id")
.removeAttr(name)
- 删除属性 2. .prop(x) 一个值是获取 属性的返回值是布尔类型 .prop(x,y) 两个值是设置 .removeProp(name)
- 删除属性 - 例子
全选、反选、取消的例子
- 循环
each
- $.each(数组/对象, function(i, v){})
- i 是数组/对象的 索引
- v 是数组/对象的 值 - $("jQuery数组对象").each(function(){})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>全选反选取消</title> <link rel="stylesheet" href="bootstrap-3.3.7/css/bootstrap.min.css">
</head>
<body> <div class="container">
<div class="row">
<div class="panel panel-default">
<div class="panel-heading">
<button id="all" class="btn-btn-default">全选</button>
<button id="cancel" class="btn-btn-default">取消</button>
<button id="reverse" class="btn-btn-default">反选</button>
</div>
<div class="panel-body">
<table class="table table-bordered">
<thead>
<tr>
<th>#</th>
<th>First Name</th>
<th>Last Name</th>
<th>Username</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row"><input type="checkbox"></th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row"><input type="checkbox"></th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row"><input type="checkbox"></th>
<td>Larry</td>
<td>the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<script src="jquery-3.2.1.js"></script>
<script>
// 全选
$("#all").on("click", function () {
// 统一的操作
$(":checkbox").prop("checked", true);
}) //取消
$("#cancel").on("click", function () {
$(":checkbox").prop("checked", false);
}) // // 反选
$("#reverse").on("click", function () {
// 取出所有的checkbox
var checkboxEles = $(":checkbox"); // 要循环checkbox
// 选中的就取消
// 没选中的就选中
checkboxEles.each(function () {
var thisCheckbox = $(this); // 在教室里走的那个人
var isChecked = thisCheckbox.prop("checked"); // 是否选中 // 方法一:判断的方式
if (isChecked){
// 取消选中
thisCheckbox.prop("checked", false);
}else {
// 选中
thisCheckbox.prop("checked", true);
} // // 方法二:直接取反的方式
// thisCheckbox.prop("checked", !isChecked); })
}) </script> </body>
</html>
   二、 css类
  addClass()
  removeClass()   toggleClass(class|fn[,sw]) 切换,有就去掉,没有就加上
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>示例一</title>
<style>
.c11 {
height: 100px;
width: 100px;
border-radius: 50%;
border: 1px solid #cccccc;
display: inline-block;
} .c12 {
background-color: yellow;
}
</style>
</head>
<body> <div class="c11"></div> <button id="switch" class="btn btn-default">开关</button>
<script src="jquery-3.2.1.js"></script>
<script> //jQuery绑定事件
$("#switch").on("click", function () {
// 找灯泡
$(".c11").toggleClass("c12");
}) </script>
</body> </html>

灯泡的例子


    三、文档处理

     没有参数就是获取对应的值,有参数就是设置对应的值

      html()  获取标签

            加 html标签
.html("<span>老师,我好饿。</span>")
注意:添加新标签之后原标签会消失 text() 获取文本 加文本
.text("老师,我好饿。")
注意:标签内的所有文本/标签 都会改变成设置的文本 val()
- input
- 获取的是输入的内容
- 有参数就是设置对应的值 - checkbox
- 获取的是value值 (如果你的选择器选出了多个对象,那么默认只会返回第一个的属性)
- 有参数就是设置对应的值 - select
- 单选 就是获取值
- 多选 得到的是一个数组,设置的时候也要是数组

3.  CSS 操作

CSS
.css()
- .css("color") -> 获取color css值
- .css("color", "#ff0000") -> 设置值
- .css({"color": "#cccccc", "border": "1px solid #ff0000"}) -> 设置多个值
- .css(["color", "border"]) -> 获取多个值 位置
.offset()
- 获取相对位置
- 比较的对象是 html(可视窗口) .position()
- 获取相对已经定位的父标签的位置
- 比较的是最近的那个做过定位的祖先标签

python-day59--前端 jQuerypython-day59--前端 jQuery
     .scrollTop()
    
        - 例子:页面返回顶部    ,也可以给一个很大的标签(有滚动效果的标签)使用

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
#b1{
position: fixed;
right: 15px;
bottom: 15px;
}
.hide{
display: none;
}
</style>
</head>
<body>
<div class="c1" GDP="">戴帽子1</div>
<div class="c1" GDP="">戴帽子2</div>
<div class="c1" GDP="">戴帽子3</div>
<div class="c1" GDP="">戴帽子4</div>
<div class="c1" GDP="">戴帽子5</div>
<div class="c1" GDP="">戴帽子6</div>
<div class="c1" GDP="">戴帽子7</div>
<div class="c1" GDP="">戴帽子8</div>
<div class="c1" GDP="">戴帽子9</div>
<div class="c1" GDP="">戴帽子10</div>
<div class="c1" GDP="">戴帽子11</div>
<div class="c1" GDP="">戴帽子12</div>
<div class="c1" GDP="">戴帽子13</div>
<div class="c1" GDP="">戴帽子14</div>
<div class="c1" GDP="">戴帽子15</div>
<div class="c1" GDP="">戴帽子16</div>
<div class="c1" GDP="">戴帽子17</div>
<div class="c1" GDP="">戴帽子18</div>
<div class="c1" GDP="">戴帽子19</div>
<div class="c1" GDP="">戴帽子20</div>
<div class="c1" GDP="">戴帽子21</div>
<div class="c1" GDP="">戴帽子22</div>
<div class="c1" GDP="">戴帽子23</div>
<div class="c1" GDP="">戴帽子24</div>
<div class="c1" GDP="">戴帽子25</div>
<div class="c1" GDP="">戴帽子26</div>
<div class="c1" GDP="">戴帽子27</div>
<div class="c1" GDP="">戴帽子28</div>
<div class="c1" GDP="">戴帽子29</div>
<div class="c1" GDP="">戴帽子30</div>
<div class="c1" GDP="">戴帽子31</div>
<div class="c1" GDP="">戴帽子32</div>
<div class="c1" GDP="">戴帽子33</div>
<div class="c1" GDP="">戴帽子34</div>
<div class="c1" GDP="">戴帽子35</div>
<div class="c1" GDP="">戴帽子36</div>
<div class="c1" GDP="">戴帽子37</div>
<div class="c1" GDP="">戴帽子38</div>
<div class="c1" GDP="">戴帽子39</div>
<div class="c1" GDP="">戴帽子40</div>
<div class="c1" GDP="">戴帽子41</div>
<div class="c1" GDP="">戴帽子42</div>
<div class="c1" GDP="">戴帽子43</div>
<div class="c1" GDP="">戴帽子44</div>
<div class="c1" GDP="">戴帽子45</div>
<div class="c1" GDP="">戴帽子46</div>
<div class="c1" GDP="">戴帽子47</div>
<div class="c1" GDP="">戴帽子48</div>
<div class="c1" GDP="">戴帽子49</div>
<div class="c1" GDP="">戴帽子50</div>
<div class="c1" GDP="">戴帽子51</div>
<div class="c1" GDP="">戴帽子52</div>
<div class="c1" GDP="">戴帽子53</div>
<div class="c1" GDP="">戴帽子54</div>
<div class="c1" GDP="">戴帽子55</div>
<div class="c1" GDP="">戴帽子56</div>
<div class="c1" GDP="">戴帽子57</div>
<div class="c1" GDP="">戴帽子58</div>
<div class="c1" GDP="">戴帽子59</div>
<div class="c1" GDP="">戴帽子60</div>
<div class="c1" GDP="">戴帽子61</div>
<div class="c1" GDP="">戴帽子62</div>
<div class="c1" GDP="">戴帽子63</div>
<div class="c1" GDP="">戴帽子64</div>
<div class="c1" GDP="">戴帽子65</div>
<div class="c1" GDP="">戴帽子66</div>
<div class="c1" GDP="">戴帽子67</div>
<div class="c1" GDP="">戴帽子68</div>
<div class="c1" GDP="">戴帽子69</div>
<div class="c1" GDP="">戴帽子70</div>
<div class="c1" GDP="">戴帽子71</div>
<div class="c1" GDP="">戴帽子72</div>
<div class="c1" GDP="">戴帽子73</div>
<div class="c1" GDP="">戴帽子74</div>
<div class="c1" GDP="">戴帽子75</div>
<div class="c1" GDP="">戴帽子76</div>
<div class="c1" GDP="">戴帽子77</div>
<div class="c1" GDP="">戴帽子78</div>
<div class="c1" GDP="">戴帽子79</div>
<div class="c1" GDP="">戴帽子80</div>
<div class="c1" GDP="">戴帽子81</div>
<div class="c1" GDP="">戴帽子82</div>
<div class="c1" GDP="">戴帽子83</div>
<div class="c1" GDP="">戴帽子84</div>
<div class="c1" GDP="">戴帽子85</div>
<div class="c1" GDP="">戴帽子86</div>
<div class="c1" GDP="">戴帽子87</div>
<div class="c1" GDP="">戴帽子88</div>
<div class="c1" GDP="">戴帽子89</div>
<div class="c1" GDP="">戴帽子90</div>
<div class="c1" GDP="">戴帽子91</div>
<div class="c1" GDP="">戴帽子92</div>
<div class="c1" GDP="">戴帽子93</div>
<div class="c1" GDP="">戴帽子94</div>
<div class="c1" GDP="">戴帽子95</div>
<div class="c1" GDP="">戴帽子96</div>
<div class="c1" GDP="">戴帽子97</div>
<div class="c1" GDP="">戴帽子98</div>
<div class="c1" GDP="">戴帽子99</div>
<div class="c1" GDP="">戴帽子100</div>
<button id="b1" class="hide">dianwo</button>
<script src="jquery-3.2.1.js"></script>
<script src="bootstrap-3.3.7/js/bootstrap.min.js"></script>
<script>
$(window).scroll(function(){
if ($(window).scrollTop()>100){ //如果屏幕滚动距离大于100
$('#b1').removeClass('hide');
}
else{
$('#b1').addClass('hide');
}
})
$('#b1').on('click',function(){
$(window).scrollTop(0); //屏幕滚动到 最顶 })
</script>
</body>
</html>

回到顶部

 .scrollLeft()

 尺寸
     height()
          - 元素的高度
      width()
      innerHeight()
          - 带padding的高度
      innerWidth()
      outerHeight()
          - 在innerHeight的基础上再加border的高度
      outerWidth() 
python-day59--前端 jQuery


4.文档操作

内部插入
append() --> 往后加
appendTo() A.append(B) -> 把B添加到A的后面
A.appendTo(B) -> 把A添加到B的后面 prepend() --> 往前加
prependTo() A.prepend(B) -> 把B添加到A的前面
A.prependTo(B) -> 把A添加到B的前面 python-day59--前端 jQuerypython-day59--前端 jQuerypython-day59--前端 jQuery
注意:111 是挪动 不是复制 外部插入
after() --> 往后加
insertAfter() A.after(B) --> 把B添加到A的后面
A.insertAfter(B) --> 把A添加到B的后面 before() --> 往前加
insertBefore() A.before(B) --> 把B添加到A的前面
A.insertBefore(B) --> 把A添加到B的前面

python-day59--前端 jQuerypython-day59--前端 jQuery

包裹
    wrap()
        A.wrap(B)  --> B包A
    unwrap()
        - 不要加参数
        
    wrapAll()
    wrapInner()

python-day59--前端 jQuerypython-day59--前端 jQuerypython-day59--前端 jQuerypython-day59--前端 jQuery

注意:

python-day59--前端 jQuerypython-day59--前端 jQuerypython-day59--前端 jQuery

    wrapAll()

python-day59--前端 jQuery

    wrapInner()

python-day59--前端 jQuery



 替换
    replaceWith()
        A.replaceWith(B)  --> B替换A

python-day59--前端 jQuery

        
    replaceAll()
        A.replaceAll(B)   --> A替换B

python-day59--前端 jQuery

 删除
     empty()
         - 清空 内部清空
     remove([expr])
         - 删除 整体都删除
     detach([expr])
         - 剪切  多保存在变量中,方便再次使用

python-day59--前端 jQuery

python-day59--前端 jQuery

python-day59--前端 jQuery
        
    复制
    clone([Even[,deepEven]])

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>克隆</title>
</head>
<body>
<button class="c1">一刀999</button> <script src="jquery-3.2.1.js"></script>
<script>
$(".c1").on("click", function () {
$(this).clone(true).insertAfter($(this)); //.clone(true) 表示把标签的绑定的事件也克隆了
})
</script>
</body>
</html>

clone练习

5.事件

 1 事件处理

    之前绑定事件的方式:
1. onclick=clickMe(); function clickMe() {}
2. ele.onclick = function(){}
3. ele.addEventListener("click", function(){}) jQuery绑定事件的方式:
1. $(ele).on("click", function(){})
2. $("tbody").delegate(".btn-warning", "click", function(){})
在$("tbody")内所有带有btn-warning类的标签,点击时就会执行函数内内容
3. $("tbody").on("click",".btn-warning",function(){}) 我们要用的事件委派  2 常用事件
      blur() - 失去焦点

      focus()
  - 获取焦点
  - 搜索框例子   change()
  - select   click()
  - 点击   dblclick()
  - 双击   scroll()
  - 滚动   submit()
  -提交   补充:
  文档树加载完之后绑定事件(绝大部分情况下)
  $(document).ready(function(){
  // 绑定事件的代码
  ....
  })   简写:
  $(function($){
   // 绑定事件的代码
  ....
  });

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>常用事件示例</title>
</head>
<body> <input type="text" name="search" value="苹果手机" data-show="">
<button>搜索</button> <select name="" id="s1">
<option value="">1</option>
<option value="">2</option>
<option value="">3</option>
<option value="">4</option>
<option value="">5</option>
</select> <script src="jquery-3.2.1.js"></script>
<script>
$(":input").focus(function () {
var data = $(this).val();
$(this).val("");
$(this).attr("data-show", data);
}); $(":input").blur(function () {
$(this).val($(this).attr("data-show"));
}); // change 通常用与select标签
$("#s1").change(function () {
console.log($(this).val());
});
</script>
</body>
</html>

常用事件练习

6.效果(动画)

基本
show()
hide()
toggle() 滑动
slideDown()
slideUp()
slideToggle() 淡入淡出
fadeIn()
fadeOut() fadeTo()
- 淡出到0.66透明度
fadeToggle()
- .fadeToggle(3000, function () {
alert("真没用3");
}); 自定义
animate(p,[s],[e],[fn])
- css属性值都可以设置
- 女朋友变小(漏气)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>动画示例</title> <style>
.hide {
display: none;
}
</style>
</head>
<body>
<img src="http://www.iyi8.com/uploadfile/2017/0523/20170523114637271.jpg" alt=""> <button id="b1">召唤</button>
<button id="b2">淡出</button>
<button id="b3">淡入</button>
<button id="b4">淡出到0.66</button>
<button id="b5">淡入淡出</button>
<button id="b6">边框变大</button>
<script src="jquery-3.2.1.js"></script>
<script>
$("#b1").on("click", function () {
// $("img").show();
$("img").toggle(); })
// 淡出
$("#b2").on("click", function () {
$("img").fadeOut("fast");
})
// 淡入
$("#b3").on("click", function () {
// 掌握了增加时间的方法
$("img").fadeIn(3000, function () {
alert("真没用");
});
})
// 淡出到0.66透明度
$("#b4").on("click", function () {
// 掌握了新知识
$("img").fadeTo(3000, 0.66, function () {
alert("真没用2");
});
})
// 淡入淡出
$("#b5").on("click", function () {
$("img").fadeToggle(3000, function () {
alert("真没用3");
});
})
// 动画-图片变小
$("#b6").on("click", function () {
$("img").animate({
width: "100px",
height: "60px"
}, 3000, function () {
// 这是回调函数
alert(123);
});
})
</script>
</body>
</html>

动画练习

7. jQuery扩展

    1.    $.extend({
"GDP": function () {
console.log("戴小红花");
}
}); - 给jQuery添加扩展
- $.GDP() 2. $.fn.extend({
"BJG": function () {
console.log("英语八级就是好!");
}
}) - 给jQuery对象添加扩展
- $(":input").BJG()
/**
* Created by Administrator on 2017/10/17.
*/
//写在js文件内,从而在html中直接调用就可以了 (function (jq) { //匿名函数
jq.extend({
"GDP": function () {
func1();
console.log("戴小红花");
}, //扩展多个方法时,用 逗号 隔开
"SGS": function () {
console.log("三国杀真好玩,我都不听课");
}
}); function func1() { //在内部定义函数 是为了把函数变成私有的方法,在外部不能调用
console.log("这是func1");
}
})(jQuery); //把jQuery 当作参数传进去 是为了避免 $被 赋值给其他的值
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录校验</title>
<link rel="stylesheet" href="bootstrap-3.3.7/css/bootstrap.min.css">
<style>
.c1 {
margin-top: 100px;
}
</style>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-4 c1 col-md-offset-4">
<form class="form-horizontal" id="login">
<div class="form-group">
<label for="username" class="col-sm-2 control-label">Email</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="username" placeholder="username" aria-describedby="helpBlock1" required="true">
<span id="helpBlock1" class="help-block"></span>
</div> </div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">密码</label>
<div class="col-sm-10">
<input type="password" class="form-control" id="inputPassword3" placeholder="Password" aria-describedby="helpBlock2">
<span id="helpBlock2" class="help-block"></span>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<div class="checkbox">
<label>
<input type="checkbox"> Remember me
</label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">Sign in</button>
</div>
</div>
</form>
</div>
</div>
</div> <script src="jquery-3.2.1.js"></script>
<script src="bootstrap-3.3.7/js/bootstrap.min.js"></script>
<!--<script src="myValidate.js"></script> myValidate.js 的引用-->
<script src="myValidate2.js"></script> <!--myValidate2.js 的引用-->
<script>
$(document).ready(function () {
// 给jQuery扩展
//$.myValidate("#login") myValidate.js 的调用 // 给jQuery对象扩展
// $.fn.extend()
$("#login").myValidate({"username": {"min-length": 6}}); // myValidate2.js的 调用
}) //{"username": {"min-length": 6}} 是动态的校验规则
</script>
</body>
</html>

自定义插件练习html代码

/**
* Created by Administrator on 2017/10/17.
*/ (function (jq) {
jq.extend({
"myValidate": function (form) {
var formObj = jq(form); formObj.find(":submit").on("click", function () {
// 先清空状态
formObj.find(".form-group").removeClass("has-error");
formObj.find("span").text(""); // each循环
formObj.find("input").each(function () {
// 做判断
if (jq(this).val().length === 0) {
// 给他的爸爸加has-error
jq(this).parent().parent().addClass("has-error");
// 给span写内容
// 找到我这是什么input --> 找到对应的label的文本内容
var name = jq(this).parent().prev().text();
jq(this).next().text(name + "不能为空");
return false;
}
});
return false;
});
}
}) })(jQuery);

自定义插件练习1 js代码

/**
* Created by Administrator on 2017/10/17.
*/ (function (jq) {
jq.fn.extend({
"myValidate": function (arg) {
// this --> .前面的那个jQuery对象
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;
formObj.find("input[required='true']").each(function () {
// this --> input框
// 做判断
if (jq(this).val().length === 0) {
// 给他的爸爸加has-error
jq(this).parent().parent().addClass("has-error");
// 给span写内容
// 找到我这是什么input --> 找到对应的label的文本内容
var name = jq(this).parent().prev().text();
jq(this).next().text(name + "不能为空");
flag = false;
return flag;
} var inputID = jq(this).attr("id");
var minLength = arg[inputID]["min-length"];
if (minLength !== undefined) {
if (jq(this).val().length < minLength) {
console.log("长度太短");
// 给他的爸爸加has-error
jq(this).parent().parent().addClass("has-error");
// 给span写内容
// 找到我这是什么input --> 找到对应的label的文本内容
var name = jq(this).parent().prev().text();
jq(this).next().text(name + "长度太短");
flag = false;
return flag;
}
}
});
return flag;
})
}
})
})(jQuery);

自定义插件练习2 js代码