zoukankan      html  css  js  c++  java
  • jquery的常用api和两个特性

    jquery的三大版

    • v1.xxx 第一代版本
      • jquery-1.11.3.min.js 这个比较常用
      • 第一代版本的特点:大而全,方法是兼容所有浏览器的(包括ie6),主要应用于需要考虑兼容的pc项目中(老的政府项目)
    • v2.xxx第二代版本
      • 主要是为移动端的开发准备的,不在兼容低版本浏览器(例如:ie8及一下)。配合出现的还有jquery mobile等UI库,但是(在第二代版本的年代),第二代版本在移动端方面的处理不如Zepto.js,所以第二代的版本比较鸡肋
    • v3.xxx第三代版本
      • 也不再兼容ie低版本浏览器了,它从性能等方面都要比之前强,但是生不逢时,此时,正好是angular/vue/react这种框架崛起的时代,大家已经不再基于操作DOM的思想开发,jquery也就慢慢退出舞台了(此时,前端的开发模式已经逐渐改变了)

    jquery中常用的方法

    //1=>.获取DOM元素
    //操作方法:jq选择器(根据选择器类型快速获取需要的元素)
    $([selector],[context]) context:上下文
      $('#box')
      $('.imgBox')
      $('.box a') 获取box类名下的所有a标签
      $('a',box) 所获取和上面一样
      。。。。 
    //节点之间关系的属性:用jq选择器h获取的元素,我们设置变量名的时候一般都以$开始
    //=>还可以在设置选择器二次筛选
     let $box = $('.box')
     $box.chrildren('a')
     $box.prev(); 获取上一个哥哥元素 // $box.prev('a')获取它上一个标签名为p的哥哥
     $box.prevAll(); 
     $box.next(); 获取下一个弟弟元素
     $box.nextAll(); 
     $box.sibilings() 获取所有的兄弟元素
     $box.index() 获取索引
     $('a').filter('.active')
    ------------------------------------------------------------------------------
    //2.=>DOM增删改
    //传统方式:
    let divBox = document.createElement('div');
    divBox.id = 'box';
    divBox.className = 'box';
    document.body.appendChild(divBox) //放在所有元素末尾
    
    let str = `<div id="box" class="box"></div>`
    document.body.innerHTML = str;  //会替换掉所有元素
    
    //jquert方式:
    let str = `<div id="box" class="box"></div>`
    $('body').append(str)  //追加到末尾
    $A.appendTo($B) //把A加到B的后面,与上面不同的是主体的调换
    $('body').html(str) //等价于innerHTML,整体替换,如果html()不传参数表示获取body中的所有元素
    $link.insertBefore(str) //把其放到$link元素的前面,insertAfter放在之后
    let $list= $('.list').clone() //实现元素克隆
    $A.remove() //实现元素的删除
    
    //=>操作表单元素的内容
    $inp.val() //获取表单元素内容
    $inp.val('aaa') //设置表单元素内容
    
    -----------------------------------------------------------------------------------
    //3.=>操作自定义属性
    $box.attr('data-type') //获取自定义属性值
    $box.attr('data-type','B') //设置自定义属性值
    $box.attr({
        'type':1,
        'name':'aaa'
    }) //批量设置
    $box.removeAttr('data-type') //移除自定义属性
    
    //表单元素操作内置或者自定义属性一般使用prop和removeProp
    $radio.prop('checked')
    $radio.prop('checked',true)
    ...
    
    ----------------------------------------------------------------------------------
    //4.=>操作CSS样式(盒子模型属性)
    //设置样式
    $box.css('width,200');//=>css方法是设置或者批量设置样式(原理是style行内样式)
    $box.css({200,height:200}) //批量设置,写的值不加单位,方法会帮我们自动设置上px
    $box.addClass('active') //设置样式类(原理是对className的操作),removeClass是移除,hasClass验证是存在某个样式类 ,toggleClass之前有就是移除,没有就是新增
    
    //获取样式
    $box.css('width') //不设置值的时候就是获取(原理是getComputedStyle,所有经过计算的样式都可以获取)
    $box.offset() //获取当前元素距离BODY的左偏移和上偏移
    $box.position() //当前元素距离父参照物的左偏移和上偏移
    $box.width() //没有值为获取,加入值为设置
    

    除了DOM,jq中还提供了其他有助于项目开发的方法:

    //=>事件处理
    //$元素.on([event type],[function]) 添加事件
    //$元素.off([event type],[function]) 移除事件
    //$元素.bind() $元素.unbind() $元素.delegate()....
    //$元素.click()  .mouseover .mouseout ..等常用事件的快捷绑定
    
    $box.on('click',function(){});
    $box.click(function(){});
    
    //=>动画处理
    $box.animate({
        
    })
    

    jq选项卡demo

    原生js版:

      <style>
        /* 清除ul>li的默认样式 */
        .tab ul {
          list-style: none;
          padding: 0;
          margin: 0;
        }
    
        /* 清除浮动,ul盒子就会自动计算高度,不会压在div上面 */
        .tab ul:after {
          content: "";
          clear: both;
          display: block;
        }
    
        /* 右浮动,浮动之后可以设置宽高,颜色,文字居中 */
        .tab ul li {
          float: left;
           100px;
          height: 40px;
          text-align: center;
          line-height: 40px;
          background: #ccc;
          margin-right: 10px;
        }
    
        /* 选中的为粉色 */
        .tab ul li.selected {
          background: lightpink;
        }
        /* div默认隐藏,且给盒子设置宽高 */
        .tab div {
          display: none;
           360px;
          height: 200px;
          text-align: center;
          line-height: 200px;
          background: lightpink;
        }
    	/* 选中项显示*/
        .tab div.selected {
          display: block;
        }
      </style>
    </head>
    
    <body>
      <div class="tab">
        <ul>
          <li class="selected">图片</li>
          <li>专栏</li>
          <li>热点</li>
        </ul>
        <div class="selected">图片内容</div>
        <div>专栏内容</div>
        <div>热点内容</div>
      </div>
      <script type="text/javascript">
        var tab = document.getElementsByClassName('tab')[0];
        var lis = tab.getElementsByTagName('li');
        var divs = tab.getElementsByTagName('div');
        // 当tab标签改变的时候(就是li改变),先清空所有样式,在给被点击的tab和div添加selected样式
        var changeTab = function (n) {
          for (var i = 0; i < lis.length; i++) {
            lis[i].className = '';
            divs[i].className = '';
          }
          lis[n].className = 'selected';
          divs[n].className = 'selected';
        }
        // 遍历所有nav(li),给每个li赋予一个索引和点击事件,当点击事件触发的时候,传入当前被点击的索引
        for(var i =0;i<lis.length ;i++){
          var item = lis[i];
          item.myIndex = i ;
          item.onclick = function(){
            changeTab(this.myIndex)
          }
        }
      </script>
    

    html,css都不变

    JQ版(讲解JQ的两大特性)1.内置循环处理机制 2.链式写法:

      <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
      <script type="text/javascript">
      // $([function]):等到页面中所有DOM结构加载完成才会执行这个方法
      //  等价于 => $(document).ready([function])
      // window.onload =function{} :等待页面中所有的资源(DOM结构,内容,其他的富媒体资源等)加载完成才会执行函数
       $(function(){
        let $tabBox = $('.tab'),
            $navList =$('.tab li'),
            $divList =$('.tab div')
        // 不用像下面一样循环出每一项在绑定事件
        // =>JQ特性:内置循环处理机制(基于一个JQ集合去操作某个方法,我们无需循环每一项单独操作,JQ内部帮我们处理了)
        $navList.on('click',function(){
          //=>this:当前点击操作的元素 =>$this才能调取JQ方法
          //=>JQ特性:链式写法(链式标准:操作的是JQ实例)
          let index = $(this).index();//获取当前点击这个元素的索引
          $(this).addClass('selected').siblings().removeClass('selected'); 
          //=>根据点击li的索引,在div集合中找到对应的哪一项,然后这一项选中,然后它的兄弟项都移除选中即可
          $divList.eq(index).addClass('selected').siblings().removeClass('selected');
        })
        // //=>基于JQ中的EACH遍历集合中的每一项
        // $navList.each(function(index,$item){
        //   //参数顺序和内置的forEach是反着的,forEach:(item,index)  each(index,item)
        //   //这里如果将函数换成了箭头函数,所以这里的this不再是循环的这一项(箭头函数中没有this)
        //   $item.on('click',function(){
        //     //...
        //   })
        // })
       })
      </script>
    

    JQ最终版本:

      <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
      <script type="text/javascript">
       $(function(){
       //通过内置循环和链式操作,不断的.操作后.操作
        $('.tab > ul > li').click(function(){
          let index = $(this).index();
          $(this).addClass('selected')
          .siblings().removeClass('selected')
          .parent()
          .nextAll('div').eq(index).addClass('selected')
          .siblings().removeClass('selected')
        })
       })
      </script>
    
  • 相关阅读:
    linux tcp/ip 调优
    ulimit 管理系统资源
    linux grep 设置高亮显示
    linux 调整内核优化
    微信公众平台自定义菜单及高级接口PHP SDK
    微信公众平台开发(102) 模版消息
    微信WeixinJSBridge API
    微信支付开发(2) 静态链接Native支付
    微信分享JS接口失效说明及解决方案
    微信JS接口
  • 原文地址:https://www.cnblogs.com/JCDXH/p/12346113.html
Copyright © 2011-2022 走看看