• jQuery入门与使用


    jQuery介绍

    jQuery是一个快速,小巧,功能丰富的JavaScript库。它带有大量的易于使用的API,使得HTML文档遍历和操作,事件处理,动画和Ajax更加简单。

    另外,它只是封装了js的DOM的操作和ajax,其它的未封装,所以js是包含jQuery的。使用jQuery,可以更加方便的操作DOM。

    jQuery兼容多个浏览器的,你在使用jQuery的时候就不需要考虑浏览器兼容问题。

    jQuery的宗旨是:write less, do more

    使用jQuery可以做很多事情,比如:

    选择器、筛选器、样式操作、文本操作、属性操作、文档处理、事件、动画、插件
    each、data、Ajax(重点 django部分学)

    jQuery是js的一个库,这类似Python中的模块,使用jQuery之前需要先导入jQuery。

    jQuery导入方式

    目前jQuery的主要使用版本是:3.4、3.5

    第一种方式:本地文件导入

    其实,jQuery本质上就是一个js文件,我们从官网https://jquery.com/download/下载该文件后,在我们的HTML代码中,通过script标签的src属性引入即可

    补充:jQuery文件我们一般使用两种:压缩版(.min.js结尾)和不压缩版(.js结尾)。压缩版主要用在线上生产环境;不要主要在实际项目开发中。

    第二种方式:jquery的CDN服务

    CDN(Content Delivery Network)直接翻译:内容分发网络。其实就是将一个地方的网络资源分布在不同的网络位置,这样当用户请求资源时,就可以就近获取资源,节省时间。

    CDN有免费的也有付费的服务。使用CND引入的方式必须保证当前计算机有网络。

    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>     // 前端免费的cdn网站:bootcdn

     jQuery基本语法

    jQuery(选择器).action()  # 可以简写如下
    
    $(选择器).action()

    jQuery与原生js对比

    // eg:将p标签内部的文本颜色改为红色
    // 原生js代码操作标签
    let pEle = document.getElementById('d1')
    pEle.style.color = 'red'
    
    
    // jQuery操作标签
    $('p').css('color','blue')

    补充:

      jQuery对象在保存名字时,规范命名方式:$pEle

    标签对象和jQuery对象

    掌握两点:(区别标签对象和jQuery对象;两者之间的转换)

    • jQuery对象通过索引值为0的值就是标签对象
    • 标签对象套一个$就是jQuery对象
    $('#d1')[0]                  // jQuery对象 ----> 标签对象
    <div id="d1"></div>
    document.getElementById('d1')
    <div id="d1"></div>
    
    $(document.getElementById('d1'))  // 标签对象 ----> jQuery对象
    w.fn.init [div#d1]

    查找标签

    基本选择器

    类似CSS的基本选择器:id选择器、class选择器、标签选择器

    $('#d1')    // id选择器, w.fn.init [div#d1]0: div#d1length: 1__proto__: Object(0)
    $('.c1')    // class选择器
    $('span')    // 标签选择器
    $('*')        // 所有的  
    // id选择器
    $('#d1')
    w.fn.init [div#d1]0: div#d1length: 1__proto__: Object(0)
    // class选择器
    $('.c1')
    w.fn.init [p.c1, prevObject: w.fn.init(1)]0: p.c1length: 1prevObject: w.fn.init [document]__proto__: Object(0)
    // 标签选择器
    $('span')
    w.fn.init(3) [span, span, span, prevObject: w.fn.init(1)]
    
    """一定要区分开(重点)"""
    // jQuery对象如何变成标签对象
    undefined
    $('#d1')[0]
    <div id=​"d1">​…​</div>​
    document.getElementById('d1')
    <div id=​"d1">​…​</div>// 标签对象如何转jQuery对象
    undefined
    $(document.getElementById('d1'))
    w.fn.init [div#d1]

    层级选择器/分组嵌套

    层级选择器,或者说是组合选择器。个人感觉层级选择器的叫法更加见名知其意。

    类似CSS的层级选择器和分组选择器

    $('div span')           // 后代 空格
    $('div>span')           // 儿子,>
    $('div+span')           // 毗邻, +
    $('div~span')           // 弟弟, ~
    $('#d1, .c1,p')     // 选择多个,逗号分割
    $('div#d1')        // w.fn.init [div#d1, prevObject: w.fn.init(1)],同时满足条件的
    $('div.c1')
    $('div')
    w.fn.init(2) [div#d1, div.c1, prevObject: w.fn.init(1)]
    $('div.c1')
    w.fn.init [div.c1, prevObject: w.fn.init(1)]0: div.c1length: 1prevObject: w.fn.init [document]__proto__: Object(0)
    $('div#d1')
    w.fn.init [div#d1, prevObject: w.fn.init(1)]
    $('*')
    w.fn.init(19) [html, head, meta, title, meta, link, script, script, body, span, span, div#d1, span, p#d2, span, span, div.c1, span, span, prevObject: w.fn.init(1)]
                   
    $('#d1,.c1,p')  # 并列+混用
    w.fn.init(3) [div#d1, p#d2, div.c1, prevObject: w.fn.init(1)]
                  
    $('div span')  # 后代
    w.fn.init(3) [span, span, span, prevObject: w.fn.init(1)]
    $('div>span')  # 儿子
    w.fn.init(2) [span, span, prevObject: w.fn.init(1)]
    $('div+span')  # 毗邻
    w.fn.init [span, prevObject: w.fn.init(1)]
    $('div~span')  # 弟弟
    w.fn.init(2) [span, span, prevObject: w.fn.init(1)]

    属性选择器

    类似CSS的属性选择器,[]

    $('[username]')
    $('[username="the3times"]')
    $('input[username="the3times"]')
    
    $('[type]')
    $('input[type="text"]')

    基本筛选器

    $('ul li')            // 后代选择器, ul下面所有的li
              
    $('ul li:first')        // 大儿子, ul的第一个li  
    $('ul li:last')         // 小儿子, ul的最后一个li
    
           
    $('ul li:eq(2)')    // 索引值等于,某个值的li
    $('ul li:gt(2)')      // 索引值大于,某个值的li         
    $('ul li:lt(2)')      // 索引值小于,某个值的li
    
    
    $('ul li:even')      // 偶数索引的li(包含0)              
    $('ul li:odd')       // 奇数索引的li
    
                  
    $('ul li:not("#d1")')      // 获取排除id是d1的所有li
    $('div:has("p")')      // 获取有子标签,且子标签中有是p标签的div

    表单筛选器

    仅用在form表单标签内的那些标签上,如:inputselecttextarea标签

    $('input[type="text"]')
    $('input[type="password"]')        // 完整的选择器写法
    
    $(':text')                          //简化的写法
    $(':password') 
    
    // 下面这些都是简化后的方式
    :text
    :password
    :file
    :radio
    :checkbox
    :submit
    :reset
    :button
    ...

    除了inputtype属性可以简化,其他的表单属性也可以有类似的简化写法。

    :enabled
    :disabled
    :checked                // $(':checked')
    :selected

    特殊情况:

    • checked的简化写法不仅获取input还获取option
    • selected的简化写法只获取option
    • 如果使用checked获取input时,手动添加限制条件:$('input:checked')
    $(':checked')  # 将checked和selected都拿到
    w.fn.init(2) [input, option, prevObject: w.fn.init(1)]0: input1: optionlength: 2prevObject: w.fn.init [document]__proto__: Object(0)
    
    
    $(':selected')  
    w.fn.init [option, prevObject: w.fn.init(1)]
    
    $('input:checked') # 自己加一个限制条件 
    w.fn.init [input, prevObject: w.fn.init(1)]

    筛选器方法

    筛选器方法,其实和上述选择器的目的一样,区别在于它是通过某一个基准jQuery象的内置方法,来定位其他的jQuery对象。

    定位同层级的jQuery对象

    $('#d1').next()           // 同层级下面一个
    $('#d1').nextAll()         // 同层级下面所有的
    $('#d1').nextUntil('.c1')        // 同级别下面的所有,直到指定对象之前的(不包括指定的对象)
          
    $('.c1').prev()             // 类似,同层级上面一个
    $('.c1').prevAll()
    $('.c1').prevUntil('#d2')
    
    $('#d2').siblings()               // 同级别上下所有

    定位不同层级的jQuery对象

    $('#d3').parent()           // 第一级父标签,可以链式找到document
    $('#d3').parent().parent()     // 链式
    $('#d3').parents()         // 所有的父级标签,直到html
    $('#d3').parentsUntil('body')     // body标签以下的父级标签
        
    $('#d2').children()               // 所有的子标签

    其他

    $('div').find('p')              // 等价于 $('div p'), 找div里面的p标签
    
    $('div span').first()             // 等价于 $('div span:first'),找第一个span
    $('div span').last()             // 找最后一个span
    
    $('div span').not('#d3')         // 等价于 $('div span:not("#d3")'), 排除id是d3的所有div中的span标签
    $('div span').hasClass('C1')     // 返回布尔值 true/false

    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>jQuery选择器筛选器练习</title>
      <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
      <link href="https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
      <style>
    
        .my-padding {
          padding: 10px 0;
        }
    
        .my-dark {
          background-color: #f5f5f5;
        }
    
        .footer {
          background: #111;
          font-size: 0.9em;
          position: relative;
          clear: both;
        }
        .my-white {
          color: #ffffff;
        }
    
        body {
          margin: 0;
        }
        #progress {
          height: 2px;
          background-color: #b91f1f;
          transition: opacity 500ms linear;
        }
        #progress.done{
          opacity: 0;
        }
      </style>
    </head>
    <body>
    <div id="progress"></div>
    <!--导航栏开始-->
    <nav class="navbar navbar-inverse my-nav">
      <div class="container">
        <!-- Brand and toggle get grouped for better mobile display -->
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
                  data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="http://www.oldboyedu.com/"><strong>OldBoy Edu</strong></a>
        </div>
    
        <!-- Collect the nav links, forms, and other content for toggling -->
        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
          <ul class="nav navbar-nav">
            <li><a href="#">Python学院<span class="sr-only">(current)</span></a></li>
            <li><a href="#">Linux学院</a></li>
            <li><a href="http://luffy.oldboyedu.com">路飞学城</a></li>
          </ul>
          <ul class="nav navbar-nav navbar-right">
            <li><a href="#">好好学习</a></li>
            <li class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                 aria-expanded="false">联系我们<span class="caret"></span></a>
              <ul class="dropdown-menu">
                <li><a href="#">Jason</a></li>
                <li><a href="#">Sean</a></li>
                <li><a href="#">Oscar</a></li>
                <li role="separator" class="divider"></li>
                <li><a href="#">Jason</a></li>
              </ul>
            </li>
          </ul>
        </div><!-- /.navbar-collapse -->
      </div><!-- /.container-fluid -->
    </nav>
    <!--导航栏结束-->
    
    
    <div class="container">
    
      <div class="jumbotron">
        <div id="i1" class="container">
          <h1 class="c1">Jason</h1>
          <h1 class="c1">带你学习jQuery</h1>
          <p id="p1"><a class="btn btn-primary btn-lg" href="https://q1mi.github.io/Blog/2017/07/10/about_jQuery/"
                        role="button">查看更多</a></p></div>
      </div>
      <hr>
      <div class="row">
        <div class="col-md-12">
          <table class="table table-bordered table-striped">
            <thead>
            <tr>
              <th>#</th>
              <th>姓名</th>
              <th>爱好</th>
              <th>操作</th>
            </tr>
            </thead>
            <tbody>
            <tr>
              <th>1</th>
              <td>Jason</td>
              <td>学习</td>
              <td>
                <button class="btn btn-warning">编辑</button>
                <button class="btn btn-danger">删除</button>
              </td>
            </tr>
            <tr>
              <th>2</th>
              <td>Oscar</td>
              <td>大饼</td>
              <td>
                <button class="btn btn-warning">编辑</button>
                <button class="btn btn-danger">删除</button>
              </td>
            </tr>
            <tr id="tr3">
              <th>3</th>
              <td>Egon</td>
              <td>吹牛逼</td>
              <td>
                <button class="btn btn-warning">编辑</button>
                <button class="btn btn-danger">删除</button>
              </td>
            </tr>
            </tbody>
          </table>
        </div>
      </div>
    
      <hr>
      <div class="row">
        <div class="col-md-12">
          <form id="f1">
            <div class="form-group">
              <label for="exampleInputEmail1">邮箱</label>
              <input type="email" class="form-control" id="exampleInputEmail1" placeholder="Email">
            </div>
            <div class="form-group">
              <label for="exampleInputPassword1">密码</label>
              <input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
            </div>
            <div class="form-group">
              <label for="exampleInputFile">上传头像</label>
              <input type="file" id="exampleInputFile">
              <p class="help-block">只支持img格式。</p>
            </div>
            <button id="btnSubmit" type="submit" class="btn btn-default">提交</button>
          </form>
        </div>
      </div>
    
      <hr>
    
      <div class="row">
        <div class="col-md-12">
          <div class="checkbox-wrapper">
            <div class="panel panel-info">
              <div class="panel-heading">jQuery学习指南</div>
              <div id="my-checkbox" class="panel-body">
                <div class="checkbox">
                  <label>
                    <input type="checkbox" value="0">
                    jQuery一点都不难
                  </label>
                </div>
                <div class="checkbox">
                  <label>
                    <input type="checkbox" value="1" checked>
                    jQuery一学就会
                  </label>
                </div>
                <div class="checkbox">
                  <label>
                    <input type="checkbox" value="2">
                    jQuery就要多练
                  </label>
                </div>
    
                <div class="checkbox">
                  <label>
                    <input type="checkbox" value="3" disabled>
                    jQuery学不好
                  </label>
                </div>
              </div>
            </div>
          </div>
          <hr>
          <div class="radio-wrapper">
    
            <div class="panel panel-info">
              <div class="panel-heading">我来老男孩之后...</div>
              <div class="panel-body">
                <div class="radio">
                  <label>
                    <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked>
                    我的心中只有学习
                  </label>
                </div>
                <div class="radio">
                  <label>
                    <input type="radio" name="optionsRadios" id="optionsRadios2" value="option2">
                    学习真的太TM有意思了
                  </label>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    
      <hr>
    
      <div>
        <i class="fa fa-hand-pointer-o fa-lg fa-rotate-90" aria-hidden="true"></i>
        <a class="btn btn-success" href="http://jquery.cuishifeng.cn/">jQuery中文API指南</a>
      </div>
    
      <hr>
    
      <div class="row">
        <div class="col-md-12">
          <h2>练习题:</h2>
          <ol id="o1">
            <li>找到本页面中id是<code>i1</code>的标签</li>
            <li>找到本页面中所有的<code>h2</code>标签</li>
            <li>找到本页面中所有的<code>input</code>标签</li>
            <li>找到本页面所有样式类中有<code>c1</code>的标签</li>
            <li>找到本页面所有样式类中有<code>btn-default</code>的标签</li>
            <li>找到本页面所有样式类中有<code>c1</code>的标签和所有<code>h2</code>标签</li>
            <li>找到本页面所有样式类中有<code>c1</code>的标签和id是<code>p3</code>的标签</li>
            <li>找到本页面所有样式类中有<code>c1</code>的标签和所有样式类中有<code>btn</code>的标签</li>
            <p id="p2" class="divider"></p>
            <li>找到本页面中<code>form</code>标签中的所有<code>input</code>标签</li>
            <li>找到本页面中被包裹在<code>label</code>标签内的<code>input</code>标签</li>
            <li>找到本页面中紧挨在<code>label</code>标签后面的<code>input</code>标签</li>
            <li>找到本页面中id为<code>p2</code>的标签后面所有和它同级的<code>li</code>标签</li>
            <p id="p3" class="divider"></p>
            <li>找到id值为<code>f1</code>的标签内部的第一个input标签</li>
            <li>找到id值为<code>my-checkbox</code>的标签内部最后一个input标签</li>
            <li>找到id值为<code>my-checkbox</code>的标签内部没有被选中的那个input标签</li>
            <li>找到所有含有<code>input</code>标签的<code>label</code>标签</li>
          </ol>
        </div>
      </div>
    </div>
    
    <div class="my-dark my-padding">
      <div class="container">
        <div class="col-sm-8 my-center">
          <p>写很少的代码,做很多的事。</p>
          <h4>所以说</h4>
          <p>学好jQuery真的很重要,学好jQuery真的很重要,学好jQuery真的很重要。</p>
        </div>
      </div>
    </div>
    
    <div class="footer">
      <div class="row">
        <div class="col-md-12 text-center">
          <span class="my-white">&copy;2020 Jason</span>
        </div>
      </div>
    </div>
    
    <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
    <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    </body>
    </html>

    答案

    $('#i1')
    r.fn.init [div#i1.container]
               
    $('h2')
    r.fn.init [h2, prevObject: r.fn.init(1)]
    
    $('input')
    r.fn.init(9) [input#exampleInputEmail1.form-control, input#exampleInputPassword1.form-control, input#exampleInputFile, input, input, input, input, input#optionsRadios1, input#optionsRadios2, prevObject: r.fn.init(1)]
                  
    $('.c1')
    r.fn.init(2) [h1.c1, h1.c1, prevObject: r.fn.init(1)]
    
    $('.btn-default')
    r.fn.init [button#btnSubmit.btn.btn-default, prevObject: r.fn.init(1)]
               
    $('.c1,h2')
    r.fn.init(3) [h1.c1, h1.c1, h2, prevObject: r.fn.init(1)]
    
    $('.c1,#p3')
    r.fn.init(3) [h1.c1, h1.c1, p#p3.divider, prevObject: r.fn.init(1)]
                  
    $('.c1,.btn')
    r.fn.init(11) [h1.c1, h1.c1, a.btn.btn-primary.btn-lg, button.btn.btn-warning, button.btn.btn-danger, button.btn.btn-warning, button.btn.btn-danger, button.btn.btn-warning, button.btn.btn-danger, button#btnSubmit.btn.btn-default, a.btn.btn-success, prevObject: r.fn.init(1)]
                   
    $('form').find('input')
    r.fn.init(3) [input#exampleInputEmail1.form-control, input#exampleInputPassword1.form-control, input#exampleInputFile, prevObject: r.fn.init(1)]
                  
    $('label input')
    r.fn.init(6) [input, input, input, input, input#optionsRadios1, input#optionsRadios2, prevObject: r.fn.init(1)]
                  
    $('label+input')
    r.fn.init(3) [input#exampleInputEmail1.form-control, input#exampleInputPassword1.form-control, input#exampleInputFile, prevObject: r.fn.init(1)]
                  
    $('#p2~li')
    r.fn.init(8) [li, li, li, li, li, li, li, li, prevObject: r.fn.init(1)]
    
    $('#f1 input:first')
    r.fn.init [input#exampleInputEmail1.form-control, prevObject: r.fn.init(1)]
               
    $('#my-checkbox input:last')
    r.fn.init [input, prevObject: r.fn.init(1)]
    
    $('#my-checkbox input[checked!="checked"]')
    r.fn.init(3) [input, input, input, prevObject: r.fn.init(1)]0: input1: input2: inputlength: 3prevObject: r.fn.init [document]__proto__: Object(0)
    
    $('label:has("input")')
    r.fn.init(6) [label, label, label, label, label, label, prevObject: r.fn.init(1)]

    标签操作

    标签操作的范围包括:标签CSS样式、类属性的增删改查、窗口位置、标签尺寸相关、标签本文内容的增删改查、input数据值、属性相关、标签节点的增删改查等。

    类的操作

    addClass(name)
    removeClass(name)
    hasClass(name)             // 判断是否有class,返回不布尔值
    toggleClass(name)

    CSS操作

    jQuery具有非常强大的链式操作,即每次调用jquery对象的方法后,依然会返回当前jQuery对象,可以继续调用对象的方法。

    $('p#d1').css('color', 'red')

    位置操作

    位置操作的内容主要是获取浏览器窗口页面的滚动位置、标签相对位置等。

    offset()                    // 相对浏览器窗口,x,y方向偏移量
    position()                    // 相对父级标签,x,y方向偏移量
    
    $(window).scrollTop()            // 获取当前浏览器窗口顶部位置
    $(window).scrollTop(300)        // 设置当前浏览器窗口顶部位置
    scrollLeft()                // 浏览器窗口左右位置

    尺寸操作

    尺寸操作,主要包括标签的三个尺寸参数:文本的宽高、文本+内填充的宽高、文本+内填充+边框的宽高。

    $('p').height()               // 文本宽高
    $('p').weight()
    
    $('p').innerHeight()                 // 文本+padding
    $('p').innerWidth()
    
    $('p').outerHeight()                 // 文本+padding+border
    $('p').outerWidth()

    文本操作

    文本操作,获取标签内的文本内容,设置修改标签内文本内容。括号内传参是设置,不传参是获取文本。

    $('p').text()                   // 类似js的innerText
    $('p').html()                   // 类似js的innerHTML

    input值

    $(':text').val()          // 获取input输入框内用户输入的value值,当存在多个输入框时获取第一个的value值
    
    $(':file')[0].files[0]              // 获取第一个文件输入框内的第一个文件对象

    属性操作

    js中                                 jQuery
    setAttribute()                      attr(name,value)
    getAttribute()                      attr(name)
    removeAttribute()                   removeAttr(name)

    标签属性的增删改查操作

    attr(name)               // 获取jquery对象的标签属性值
    attr(name, value)           // 修改,增加对象属性及属性值
    removeAttr(name)           // 移除对象的某个属性
    // 为对象设置属性
    $pEle.attr('class','c1');
    /

    使用prop()查看是否被选中,针对用户选择的标签,checkboxradiooption,返回布尔值。

    $('#d2').prop('checked')           // 查看
    false
    
    $('#d3').prop('checked', true)       // 设置
    w.fn.init [input#d3]

    标签节点操作

    在标签节点中,手动增加新节点、或删除老节点。

    标签$('<p>')            // 创建p
    
    $('#d1').append($pEle)      // $('#d1')尾部追加节点pEle
    $pEle.appendTo($('#d1'))     // pEle追加到节点$('#d1')的尾部
               
    prepend()                  // 头部添加
    prependTo()
      
    after()                  // 标签后面插入
    insertAfter()    
            
    before()                // 标签前面插入
    insertBefore()
    
    $('#d1').remove()               // 将标签从DOM树中删除           
    $('#d1').empty()                // 清空标签内部所有的内容

    事件

    jQuery绑定事件的两种方式

    // 第一种
        $('#d1').click(function () {
                alert('别说话 吻我')
        });
      
    // 第二种(功能更加强大 还支持事件委托)
        $('#d2').on('click',function () {
                alert('借我钱买草莓 后面还你')
        })

    this对象

    jquery中的this对象:当前被操作的标签对象,通过$(this)转成jquery对象。

    clone事件(克隆事件)

    clone()方法默认情况下只克隆html和css不克隆事件,括号内使用true可以克隆事件。

    <button id="d1">屠龙宝刀,点击就送</button>
    
    <script>
        $('#d1').on('click',function () {
            // console.log(this)  // this指代是当前被操作的标签对象
            // $(this).clone().insertAfter($('body'))  // clone默认情况下只克隆html和css 不克隆事件
            $(this).clone(true).insertAfter($('body'))  // 括号内加true即可克隆事件
    
        })
    </script>

    左侧菜单

    <script>
        $('.title').click(function () {
            // 先给所有的items加hide
            $('.items').addClass('hide')
            // 然后将被点击标签内部的hide移除
            $(this).children().removeClass('hide')
        })
    </script>
    <!--尝试用一行代码搞定上面的操作-->

    回到顶部:scroll

    <script>
        $(window).scroll(function () {
            if($(window).scrollTop() > 300){
                $('#d1').removeClass('hide')
            }else{
                $('#d1').addClass('hide')
            }
        })
    </script>

    自定义登录校验focus事件

    # 在获取用户的用户名和密码的时候 用户如果没有填写 应该给用户展示提示信息
    <p>username:
        <input type="text" id="username">
        <span style="color: red"></span>
    </p>
    <p>password:
        <input type="text" id="password">
        <span style="color: red"></span>
    </p>
    <button id="d1">提交</button>
    
    <script>
        let $userName = $('#username')
        let $passWord = $('#password')
        $('#d1').click(function () {
            // 获取用户输入的用户名和密码 做校验
            let userName = $userName.val()
            let passWord = $passWord.val()
            if (!userName){
                $userName.next().text("用户名不能为空")
            }
            if (!passWord){
                $passWord.next().text('密码不能为空')
            }
        })
        $('input').focus(function () {
            $(this).next().text('')
        })
    </script>

    input事件:实时监控

    <input type="text" id="d1">
    
    <script>
        $('#d1').on('input',function () {
            console.log(this.value)  
        })
    </script>
    <!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">
      <title>实时监听input输入值变化</title>
    </head>
    <body>
    <input type="text" id="i1">
    
    <script src="jquery-3.2.1.min.js"></script>
    <script>
      /*
      * oninput是HTML5的标准事件
      * 能够检测textarea,input:text,input:password和input:search这几个元素的内容变化,
      * 在内容修改后立即被触发,不像onchange事件需要失去焦点才触发
      * oninput事件在IE9以下版本不支持,需要使用IE特有的onpropertychange事件替代
      * 使用jQuery库的话直接使用on同时绑定这两个事件即可。
      * */
      $("#i1").on("input propertychange", function () {
        alert($(this).val());
      })
    </script>
    </body>
    </html>
    
    input值变化事件

    hover事件:鼠标悬浮

    hover包含两个事件:进入悬浮和离开;当hover内只有只有一个函数时,两次事件都执行该函数,有两个函数时分别执行。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <p>苍茫的天涯是我的哎,绵绵的青山脚下一片海!</p>
    
    <script src="jQuery-3.3.1.js">
    </script>
    <script>
        $('p').hover(
            function () {
                alert('来啦,老弟')
            },
            function () {
                alert('慢走哦~')
            }
        )
    </script>
    </body>
    </html>

    键盘按键按下事件

    keydown和keyup事件组合示例:

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta http-equiv="content-Type" charset="UTF-8">
        <meta http-equiv="x-ua-compatible" content="IE=edge">
        <title>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>Egon</td>
        <td>
          <select>
            <option value="1">上线</option>
            <option value="2">下线</option>
            <option value="3">停职</option>
          </select>
        </td>
      </tr>
      <tr>
        <td><input type="checkbox"></td>
        <td>Alex</td>
        <td>
          <select>
            <option value="1">上线</option>
            <option value="2">下线</option>
            <option value="3">停职</option>
          </select>
        </td>
      </tr>
      <tr>
        <td><input type="checkbox"></td>
        <td>Yuan</td>
        <td>
          <select>
            <option value="1">上线</option>
            <option value="2">下线</option>
            <option value="3">停职</option>
          </select>
        </td>
      </tr>
      <tr>
        <td><input type="checkbox"></td>
        <td>EvaJ</td>
        <td>
          <select>
            <option value="1">上线</option>
            <option value="2">下线</option>
            <option value="3">停职</option>
          </select>
        </td>
      </tr>
      <tr>
        <td><input type="checkbox"></td>
        <td>Gold</td>
        <td>
          <select>
            <option value="1">上线</option>
            <option value="2">下线</option>
            <option value="3">停职</option>
          </select>
        </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.3.1.js"></script>
    <script>
    
        var flag = false;
        // shift按键被按下的时候
        $(window).keydown(function (event) {
            console.log(event.keyCode);
            if (event.keyCode === 16){
                flag = true;
            }
        });
        // shift按键被抬起的时候
        $(window).keyup(function (event) {
            console.log(event.keyCode);
            if (event.keyCode === 16){
                flag = false;
            }
        });
        // select标签的值发生变化的时候
        $("select").change(function (event) {
            // 如果shift按键被按下,就进入批量编辑模式
            // shift按键对应的code是16
            // 判断当前select这一行是否被选中
            console.log($(this).parent().siblings().first().find(":checkbox"));
            var isChecked = $(this).parent().siblings().first().find(":checkbox").prop("checked");
            console.log(isChecked);
            if (flag && isChecked) {
                // 进入批量编辑模式
                // 1. 取到当前select选中的值
                var value = $(this).val();
                // 2. 给其他被选中行的select设置成和我一样的值
                // 2.1 找到那些被选中行的select
                var $select = $("input:checked").parent().parent().find("select")
                // 2.2 给选中的select赋值
                $select.val(value);
            }
        });
    </script>
    </body>
    </html>

     

    阻止后续事件

    一个事件源绑定多个事件时,可以通过手动终止的方式,阻止后续默认的其他事件触发。

    <script>
        $('#d2').click(function (e) {
            $('#d1').text('宝贝 你能看到我吗?')  
            // return false;          // 阻止标签后续事件的执行 方式1
            e.preventDefault()       // 阻止标签后续事件的执行 方式2
        })
    </script>

    阻止事件冒泡(冒泡事件)

    子标签和父标签绑定了一个相同的事件,子标签的事件触发后会进而触发父标签的事件,有两种方式阻止这种事件冒泡行为。

    <script>
            $('#d1').click(function () {
                alert('div')
            })
            $('#d2').click(function () {
                alert('p')
            })
            $('#d3').click(function (e) {
                alert('span')
                // 阻止事件冒泡的方式1  (常用方式)
                // return false
                // 阻止事件冒泡的方式2
                // e.stopPropagation()
            })
    </script>

    事件委托

    需求:普通情况下,给页面上已经存在的标签绑定的事件无法作用在,后来新增的同类标签。也就是说,给页面上所有的button标签绑定一个click事件,只有当前页面上已经存在的button标签才有click事件,后来再通过js动态添加的button标签无法获得这个click事件。

    解决办法:事件委托。可以这样理解:将事件交给一个角色来处理,而不是具体的人。换句话说,将指定的任务交给这个岗位上的员工处理,而不是具体的员工A或者员工B。

    <button>是兄弟,就来砍我!!!</button>
    
    <script>
        // 给页面上所有的button标签绑定点击事件
        // $('button').click(function () {  // 无法影响到动态创建的标签
        //     alert(123)
        // })
    
        // 事件委托     
        $('body').on('click','button',function () {
            alert(123)  // 在指定的范围内 将事件委托给某个标签 无论该标签是事先写好的还是后面动态创建的
        })
    </script>

    页面加载

    # 等待页面加载完毕再执行代码
    window.onload = function(){
      // js代码
    }
    
    """jQuery中等待页面加载完毕"""
    # 第一种
    $(document).ready(function(){
      // js代码
    })
    # 第二种
    $(function(){
      // js代码
    })
    # 第三种
    """直接写在body内部最下方"""

    动画效果

    $('#d1').hide(5000)              // 5s内隐藏
    $('#d1').show(5000)              // 显示
    $('#d1').slideUp(5000)           // 上翻
    $('#d1').slideDown(5000)         // 下翻
    $('#d1').fadeOut(5000)           // 淡出
    $('#d1').fadeIn(5000)            // 淡入
    $('#d1').fadeTo(5000,0.4)        // 淡出到...     

    补充:

    each()

    each(),封装了for循环的功能

    # each(), 循环处理每个子元素
    // 方式1,类似对象调用自己的绑定方法,可以接收两个参数,
    $('div').each(function(index, obj){console.log(index,obj)})
    
    
    # 方式2, 类似类调用对象的绑定方法,需要传一个对象
    $.each([111,222,333], function(index, obj){console.log(index,obj)})
    # 第一种方式
    $('div')
    w.fn.init(10) [div, div, div, div, div, div, div, div, div, div, prevObject: w.fn.init(1)]
    $('div').each(function(index){console.log(index)})
    VM181:1 0
    VM181:1 1
    VM181:1 2
    VM181:1 3
    VM181:1 4
    VM181:1 5
    VM181:1 6
    VM181:1 7
    VM181:1 8
    VM181:1 9
    
    $('div').each(function(index,obj){console.log(index,obj)})
    VM243:1 0 <div>​1​</div>​
    VM243:1 1 <div>​2​</div>​
    VM243:1 2 <div>​3​</div>​
    VM243:1 3 <div>​4​</div>​
    VM243:1 4 <div>​5​</div>​
    VM243:1 5 <div>​6​</div>​
    VM243:1 6 <div>​7​</div>​
    VM243:1 7 <div>​8​</div>​
    VM243:1 8 <div>​9​</div>​
    VM243:1 9 <div>​10​</div>​
    
    # 第二种方式
    $.each([111,222,333],function(index,obj){console.log(index,obj)})
    VM484:1 0 111
    VM484:1 1 222
    VM484:1 2 333
    (3) [111, 222, 333]
    """
    有了each之后 就无需自己写for循环了 用它更加的方便
    """

    data()

    data(),能够让标签帮我们存储数据,并且用户肉眼看不见(不会加到html上)

    # data, 给每个子元素添加属性(对用户隐藏的)
    
    $('div').data(attr_name, attr_value)        // 添加
    
    $('div').first().removeData(attr_name)        // 移除
    """
    能够让标签帮我们存储数据 并且用户肉眼看不见
    """
    $('div').data('info','回来吧,我原谅你了!')
    w.fn.init(10) [div#d1, div, div, div, div, div, div, div, div, div, prevObject: w.fn.init(1)]
                   
    $('div').first().data('info')
    "回来吧,我原谅你了!"
    $('div').last().data('info')
    "回来吧,我原谅你了!"
                   
    $('div').first().data('xxx')
    undefined
    $('div').first().removeData('info')
    w.fn.init [div#d1, prevObject: w.fn.init(10)]
               
    $('div').first().data('info')
    undefined
    $('div').last().data('info')
    "回来吧,我原谅你了!"

    jQuery选择器转换JavaScript对象(补充)

    获取jQuery选择器对象,并绑定点击事件

    $('#btn').click(function () {    
            console.log(this.value);
    });

    用jQuery方式获取JavaScript对象,并绑定点击事件(两种方式)

    $('#btn') 对象转换为js对象:
       1. $('#btn')[0]   
       2.$('#btn').get(0)

    如:

    // 方式一
    $('#btn')[0].onclick=function () {      
                console.log(this.value);
     };
    
    // 方式二
    $('#btn').get(0).onclick=function () {
            console.log(this.value);
    }

    jQuery对象转成DOM对象:

    两种转换方式将一个jQuery对象转换成DOM对象:[index]和.get(index);

    (1)jQuery对象是一个数据对象,可以通过[index]的方法,来得到相应的DOM对象。

    如:

    var $v =$("#v") ; //jQuery对象
    var v=$v[0]; //DOM对象
    alert(v.checked) //检测这个checkbox是否被选中

    (2)jQuery本身提供,通过.get(index)方法,得到相应的DOM对象

    如:

    var $v=$("#v"); //jQuery对象
     
    var v=$v.get(0); //DOM对象
     
    alert(v.checked) //检测这个checkbox是否被选中

    DOM对象转成jQuery对象:

    对于已经是一个DOM对象,只需要用$()把DOM对象包装起来,就可以获得一个jQuery对象了。$(DOM对象)

    如:

    var v=document.getElementById("v"); //DOM对象
     
    var $v=$(v); //jQuery对象
     
  • 相关阅读:
    深入理解TCP协议及其源代码
    Socket与系统调用深度分析
    构建调试Linux内核网络代码的环境MenuOS系统
    创新产品的需求分析:未来的图书会是什么样子?
    socket通信的原理与实践
    案例分析:设计模式与代码的结构特性
    网络相关的命令工具研究报告:ssh
    业务领域建模Domain Modeling
    ubuntu 设置静态ip,但显示scope global secondary ens33
    解决Python查询Mysql中文乱码问题
  • 原文地址:https://www.cnblogs.com/Tang-Yuan/p/14430230.html
Copyright © 2020-2023  润新知