zoukankan      html  css  js  c++  java
  • 使用jQuery对象

    1基本行为

      * size()/length: 包含的DOM元素个数

      * [index]/get(index): 得到对应位置的DOM元素

      * each(): 遍历包含的所有DOM元素

      * index(): 得到在所在兄弟元素中的下标

    2属性:操作内部标签的属性或值    

    2.1操作任意属性

    attr(name|properties|key,value|fn) 设置或返回被选元素的属性值

    removeAttr(name) 从每一个匹配的元素中删除一个属性

    prop(name|properties|key,value|fn) 获取在匹配的元素集中的第一个元素的属性值。     removeProp(name) 用来删除由.prop()方法设置的属性集

    2.2操作class属性

    addClass(class|fn) 为每个匹配的元素添加指定的类名。

    removeClass(class|fn])) 从所有匹配的元素中删除全部或者指定的类。

    toggleClass(class|fn[,sw]) 如果存在(不存在)就删除(添加)一个类。

    2.3操作HTML代码/文本/值

    html(val|fn) 取得第一个匹配元素的html内容。

    text([val|fn]) 取得所有匹配元素的内容。不常用。

      val ([val|fn|arr]) 获得匹配元素的当前值。

    2.4 其他知识点

    关于attr()和prop():

    具有 true 和 false 两个属性值的属性,如 checked, selected 或者 disabled 使用prop(),其他的使用 attr()

    练习:

    <body>
    <div id="div1" class="box" title="one">class为box的div1</div>
    <div id="div2" class="box" title="two">class为box的div2</div>
    <div id="div3">div3</div>
    <span class="box">class为box的span</span>
    <br/>
    <ul>
      <li>AAAAA</li>
      <li title="hello" class="box2">BBBBB</li>
      <li class="box">CCCCC</li>
      <li title="hello">DDDDDD</li>
      <li title="two"><span>BBBBB</span></li>
    </ul>
    <input type="text" name="username" value="guiguClass"/>
    <br>
    <input type="checkbox">
    <input type="checkbox">
    <br>
    <button>选中</button>
    <button>不选中</button>
    <script src="js/jquery-1.10.1.js" type="text/javascript"></script>
    <script type="text/javascript">
      //1.
    读取第一个div的title属性
      
    console.log($('div:first').attr('title')) // one
      //2.
    给所有的div设置name属性(value为atguigu)
      
    $('div').attr('name', 'atguigu')
      //3. 移除所有div的title属性
      
    $('div').removeAttr('title')
      //4. 给所有的div设置class='guiguClass'
     
    $('div').attr('class', 'guiguClass')
      //5. 给所有的div添加class='abc'
     
    $('div').addClass('abc')
      //6. 移除所有div的guiguClass的class
     
    $('div').removeClass('guiguClass')
      //7. 得到最后一个li的标签体文本
     
    console.log($('li:last').html())
      //8. 设置第一个li的标签体为"<h1>mmmmmmmmm</h1>"
     
    $('li:first').html('<h1>mmmmmmmmm</h1>')
      //9. 得到输入框中的value值
     
    console.log($(':text').val()) // 读取
      //10. 将输入框的值设置为atguigu
     
    $(':text').val('atguigu') // 设置      读写合一
      //11. 点击'全选'按钮实现全选
        
    attr (): 操作属性值为非布尔值的属性
         prop (): 专门操作属性值为布尔值的属性
      var $checkboxs = $(':checkbox')
      $('button:first').click(function () {
        $checkboxs.prop('checked', true)
      })
      //12. 点击'全不选'按钮实现全不选
     
    $('button:last').click(function () {
        $checkboxs.prop('checked', false)
      })
    </script>
    </body>

    3 CSS:操作标签的样式

    3.1设置css样式/读取css值

    * style样式

        * css(styleName): 根据样式名得到对应的值

        * css(styleName, value): 设置一个样式

        * css({多个样式对}): 设置多个样式

    <script type="text/javascript">
    //1.
    得到第一个p标签的颜色
    console.log($('p:first').css('color'))
    //2. 设置所有p标签的文本颜色为red
    $('p').css('color', 'red')
    //3. 设置第2个p的字体颜色(#ff0011),背景(blue),宽(300px), 高(30px)
    $('p:eq(1)').css({
      color: '#ff0011',
      background: 'blue',
      width: 300,
      height: 30
    })
    </script>

    3.2获取/设置标签的位置数据

    offset([coordinates]) 获取匹配元素在当前视口的相对偏移。

    【读/写当前元素坐标(原点是页面左上角)】

    返回的对象包含两个整型属性:top 和 left。此方法只对可见元素有效。

    position() 获取匹配元素相对父元素的偏移。(相对于父元素左上角的坐标)

             【读当前元素坐标(原点是父元素左上角)】

    返回的对象包含两个整型属性:top 和 left。为精确计算结果,请在补白、边框和填充属性上使用像素单位。此方法只对可见元素有效。

    scrollTop([val]) 获取匹配元素相对滚动条顶部的偏移。(读取/设置滚动条的Y坐标)

    此方法对可见和隐藏元素均有效。

    *得到页面滚动条的scrollTop(读取页面滚动条的Y坐标(兼容chrome和IE))

             $(document.body).scrollTop()+$(document.documentElement).scrollTop()

    *设置滚动条的新坐标(滚动到指定位置(兼容chrome和IE)):

             $('body,html').scrollTop(60);

    scrollLeft([val]) 获取匹配元素相对滚动条左侧的偏移。

             此方法对可见和隐藏元素均有效。

    <script type="text/javascript">
    //点击btn1
     
    $('#btn1').click(function () {
    //    打印 div1 相对于页面左上角的位置
       
    var offset = $('.div1').offset()
        console.log(offset.left, offset.top) // 10 20
    //   
    打印 div2 相对于页面左上角的位置
       
    offset = $('.div2').offset()
        console.log(offset.left, offset.top) // 10 70
    //   
    打印 div1 相对于父元素左上角的位置
       
    var position = $('.div1').position()
        console.log(position.left, position.top) // 10 20
    //   
    打印 div2 相对于父元素左上角的位置
       
    position = $('.div2').position()
        console.log(position.left, position.top) // 0 50
     
    })
    //点击 btn2,设置 div2 相对于页面的左上角的位置
      $('#btn2').click(function () {
        $('.div2').offset({
          left: 50,
          top: 100
        })
      })
    </script>
    <script>
      //1.
    得到div或页面滚动条的坐标
     
    $('#btn1').click(function () {
        console.log($('div').scrollTop())
        // console.log($('html').scrollTop()+$('body').scrollTop())
       
    console.log($(document.documentElement).scrollTop()+$(document.body).scrollTop()) // 兼容IE/Chrome。document.documentElement相当于html,这种方法效率更高,因为上一种方法需要将html元素包装成jQuery对象返回,这种方法不用
     
    })
      //2. 让div或页面的滚动条滚动到指定位置
     
    $('#btn2').click(function () {
        $('div').scrollTop(200)
        $('html,body').scrollTop(300)
      })
    </script>

    3.3获取/设置标签的尺寸数据

    1)内容尺寸

      height(): height

      width(): width

    2)内部尺寸

      innerHeight(): height+padding

      innerWidth(): width+padding

    3)外部尺寸

      outerHeight(false/true): height+padding+border  如果是true, 加上margin

      outerWidth(false/true): width+padding+border 如果是true, 加上margin

    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>14_元素的尺寸</title>
    </head>
    <style>
      div {
        width: 100px;
        height: 150px;
        background: red;
        padding: 10px;
        border: 10px #fbd850 solid;
        margin: 10px;
      }
    </style>
    </head>
    <body>
    <div>div</div>
    <script src="js/jquery-1.10.1.js" type="text/javascript"></script>
    <script>
      var $div = $('div')
      // 1. 内容尺寸
     
    console.log($div.width(), $div.height())  // 100 150
      // 2.
    内部尺寸
     
    console.log($div.innerWidth(), $div.innerHeight()) //120 170
      // 3.
    外部尺寸
     
    console.log($div.outerWidth(), $div.outerHeight()) //140 190
     
    console.log($div.outerWidth(true), $div.outerHeight(true)) //160 210
    </script>
    </body>
    </html>

    4文档处理(CUD)模块:对标签进行增删改操作

    4.1增加

        * append() / appendTo(): 插入后部

        * preppend() / preppendTo(): 插入前部

        * before(): 插到前面

        * after(): 插到后面

    4.2删除

        * remove(): 将自己及内部的孩子都删除

        * empty(): 掏空(自己还在)

    4.3更新

    * replaceWith()

     

    5筛选:根据指定的规则过滤内部的标签

    5.1过滤

        *在jQuery对象内部的元素中找出部分匹配的元素, 并封装成新的jQuery对象返回

        * first()

        * last()

        * eq(index)

        * filter(selector): 对当前元素提要求

        * not(selector): 对当前元素提要求, 并取反

    * has(selector): 对子孙元素提要求

    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>15_筛选_过滤</title>
    </head>
    <body>
    <ul>
      <li>AAAAA</li>
      <li title="hello" class="box2">BBBBB</li>
      <li class="box">CCCCC</li>
      <li title="hello">DDDDDD</li>
      <li title="two"><span>BBBBB</span></li>
    </ul>
    <li>eeeee</li>
    <li>EEEEE</li>
    <br>
    <script src="js/jquery-1.10.1.js" type="text/javascript"></script>
    <script type="text/javascript">
     
    var $lis = $('ul>li')
      //1. ul下li标签第一个
      
    $lis.first().css('background', 'red')//操作的是jQuery对象
      
    $lis[0].style.background = 'red' //操作的是DOM元素
      //2. ul下li标签的最后一个
      
    $lis.last().css('background', 'red')
      //3. ul下li标签的第二个
      
    $lis.eq(1).css('background', 'red')
      //4. ul下li标签中title属性为hello的
      
    $lis.filter('[title=hello]').css('background', 'red')
      //5. ul下li标签中title属性不为hello的
      
    $lis.not('[title=hello]').css('background', 'red')
       $lis.filter('[title!=hello]').filter('[title]').css('background', 'red')
      //6. ul下li标签中有span子标签的
     
    $lis.has('span').css('background', 'red')
    </script>
    </body>
    </html>

    5.2查找

        *查找jQuery对象内部的元素的子孙/兄弟/父母元素, 并封装成新的jQuery对象返回

        * children(): 子标签中找

    * find() : 后代标签中找

    * parent() : 父标签

    * prevAll() : 前面所有的兄弟标签

    * nextAll() : 后面所有的兄弟标签

    * siblings() : 前后所有的兄弟标签

    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>16_筛选_查找孩子-父母-兄弟标签</title>
    </head>
    <body>
    <div id="div1" class="box" title="one">class为box的div1</div>
    <div id="div2" class="box">class为box的div2</div>
    <div id="div3">div3</div>
    <span class="box">class为box的span</span>
    <br/>
    <div>
      <ul>
        <span>span文本1</span>
        <li>AAAAA</li>
        <li title="hello" class="box2">BBBBB</li>
        <li class="box" id='cc'>CCCCC</li>
        <li title="hello">DDDDDD</li>
        <li title="two"><span>span文本2</span></li>
        <span>span文本3</span>
      </ul>
      <span>span文本444</span><br>
      <li>eeeee</li>
      <li>EEEEE</li>
      <br>
    </div>
    <script src="js/jquery-1.10.1.js" type="text/javascript"></script>
    <script type="text/javascript">
     
    var $ul = $('ul')
      //1. ul标签的第2个span子标签
     
    $ul.children('span:eq(1)').css('background', 'red')
      //2. ul标签的第2个span后代标签
      
    $ul.find('span:eq(1)').css('background', 'red')
      //3. ul标签的父标签
      
    $ul.parent().css('background', 'red')
      //4. id为cc的li标签的前面的所有li标签
     
    var $li = $('#cc')
      // $li.prevAll('li').css('background', 'red')
      //5. id
    为cc的li标签的所有兄弟li标签
     
    $li.siblings('li').css('background', 'red')
    </script>
    </body>
    </html>

    6事件:处理事件监听相关

    6.1事件处理

    1)绑定事件

        * eventName(function(){}) 绑定某个具体的事件监听

        * on('eventName', function(){}) 通用的绑定事件监听

    * 常用: click, mouseenter/mouseleave mouseover/mouseout focus/blur

    区别mouseover与mouseenter?

             * mouseover: 在移入子元素时也会触发, 对应mouseout

             * mouseenter: 只在移入当前元素时才触发, 对应mouseleave

                                                                               hover()使用的就是mouseenter()和mouseleave()

    区别on('eventName', fun)与eventName(fun)

             * on('eventName', fun): 通用, 可以添加多个监听,但编码麻烦

             * eventName(fun):编码方便, 但只能加一个监听, 且有的事件监听不支持

    2)解绑事件监听

        * off('eventName')

    6.2事件切换

             * hover(function(){}, function(){})同时绑定鼠标移入和移出监听

    6.3事件委托

    1)理解: 将子元素的事件委托给父辈元素处理

    * 事件监听绑定在父元素上, 但事件发生在子元素上

    * 事件会冒泡到父元素 

    * 但最终调用的事件回调函数的是子元素: event.target

    2)好处

    * 新增的元素没有事件监听

    * 减少监听的数量(n==>1)

    3)编码

    * delegate(selector, 'eventName', function(event){}) 绑定委托事件监听(回调函数中的this是子元素)

    * undelegate('eventName') 移除委托事件监听

    <!DOCTYPE HTML>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>20_事件委托2</title>
    </head>

    <body>
    <ul>
      <li>1111</li>
      <li>2222</li>
      <li>3333</li>
      <li>4444</li>
    </ul>

    <li>22222</li>
    <br>
    <button id="btn1">添加新的li</button>
    <button id="btn2">删除ul上的事件委托的监听器</button>

    <!--
    1.
    事件委托(委派/代理):
      * 将多个子元素(li)的事件监听委托给父辈元素(ul)处理
      * 监听回调是加在了父辈元素上
      * 当操作任何一个子元素(li)时, 事件会冒泡到父辈元素(ul)
      * 父辈元素不会直接处理事件, 而是根据event.target得到发生事件的子元素(li), 通过这个子元素调用事件回调函数
    2. 事件委托的2方:
      * 委托方: 业主  li
      * 被委托方: 中介  ul
    3. 使用事件委托的好处
      * 添加新的子元素, 自动有事件响应处理
      * 减少事件监听的数量: n==>1
    4. jQuery的事件委托API
      * 设置事件委托: $(parentSelector).delegate(childrenSelector, eventName, callback)
      * 移除事件委托: $(parentSelector).undelegate(eventName)
    -->
    <script src="js/jquery-1.10.1.js"></script>
    <script>
      // 设置事件委托
     
    $('ul').delegate('li', 'click', function () {
        // console.log(this)
       
    this.style.background = 'red'
     
    })

      $('#btn1').click(function () {
        $('ul').append('<li>新增的li....</li>')
      })

      $('#btn2').click(function () {
        // 移除事件委托
       
    $('ul').undelegate('click')
      })
    </script>
    </body>
    </html>

    6.4相关重要知识

    1)事件坐标 

    2)事件相关

        * 停止事件冒泡: event.stopPropagation()

        * 阻止事件的默认行为: event.preventDefault()

    7效果:实现一些动画效果

     

    8 jQuery对象使用方法

       链式调用:调用jQuery对象的任何方法后返回的还是当前jQuery对象

       读写合一:【读】内部第一个dom元素;【写】内部所有的dom元素

    8.1 多库共存

    问题 : 如果有2个库都有$, 就存在冲突

    解决 : jQuery库可以释放$的使用权, 让另一个库可以正常使用, 此时jQuery库只能使用jQuery了

    API :  jQuery.noConflict()

    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>26_多库共存</title>
      <style type="text/css">
        * {
          margin: 0px;
        }

        .div1 {
          position: absolute;
          width: 100px;
          height: 100px;
          top: 50px;
          left: 10px;
          background: red;
        }
      </style>
    </head>
    <body>
    <script type="text/javascript" src="js/myLib.js"></script>
    <script type="text/javascript" src="js/jquery-1.10.1.js"></script>
    <script type="text/javascript">
      // 释放$的使用权
     
    jQuery.noConflict()
      // 调用myLib中的$
     
    $()
      // 要想使用jQuery的功能, 只能使用jQuery
     
    jQuery(function () {
        console.log('文档加载完成')
      })
      console.log('+++++')
    </script>
    </body>
    </html>

    8.2区别window.onload与 $(document).ready()

      * window.onload

        * 包括页面的图片加载完后才会回调(晚)

        * 只能有一个监听回调

      * $(document).ready()

        * 等同于: $(function(){})

        * 页面加载完就回调(早)

        * 可以有多个监听回调

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>window.onload与$(document).ready()</title>
    </head>
    <body>
    <h1>测试window.onload与$(document).ready()</h1>
    <img id="logo" src="https://gss0.bdstatic.com/5bVWsj_p_tVS5dKfpU_Y_D3/res/r/image/2017-05-19/6fec71d56242b74eb24b4ac80b817eac.png">
    <script type="text/javascript" src="js/jquery-1.10.1.js"></script>
    <script type="text/javascript">
      /*
      
    需求:
       1. 直接打印img的宽度,观察其值
       2. 在 $(function(){}) 中 打印 img 的宽度
       3. 在 window.onload 中打印宽度
       4. 在 img 加载完成后打印宽度
       */
      // 1. 直接打印img的宽度,观察其值
     
    console.log('直接', $('#logo').width()) 
      window.onload = function () {
        console.log('onload', $('#logo').width())
      }
      window.onload = function () {
        console.log('onload2', $('#logo').width())
      } 
      $(function () {
        console.log('ready', $('#logo').width())
      })
      $(function () {
        console.log('ready2', $('#logo').width())
      })
      $('#logo').on('load', function () {
        console.log('img load', $(this).width())
      })
      /*$(document).ready(function () {
      })*/
    </script>
    </body>
    </html>
  • 相关阅读:
    定时任务 常用cron表达式
    链接UTF-8编码带BOM尾,访问出现404
    centos安装nginx
    cnetos安装jdk
    javaweb数据分页
    mvn clean install对idea中项目结构的影响
    spring使用servlet过滤器filter,进行登录校验
    docker安装mysql并修改远程登陆权限
    使用token令牌控制接口幂等性
    718.最长重复子数组
  • 原文地址:https://www.cnblogs.com/superjishere/p/11758130.html
Copyright © 2011-2022 走看看