jQuery体验

作者: icessun | 来源:发表于2017-06-12 17:02 被阅读51次

jQuery是一个轻量级的js库,jQuery的所有功能都可以通过JavaScript进行访问,兼容大多数浏览器,使得对html的文档遍历和操作,事件的处理,动画和Ajax操作更加简单

注意两点

  • 从源码知道:jQuery是一个类,jQuery()是一个实例(因为执行完成返回的是一个new,是实例)

  • $().XXX $('div').html() 实例的方法

  • 调用jQuery的方法,即,使用$()来调用的方法都是在$.fn的命名空间中,指向到jQuery原型上面,或者说是jQuery上面的原型方法,即jQuery对象上的方法;并且会自动接收返回的this;原型上面只能实例使用;$()返回的是实例,所有原型上面的方法中的this都指向实例
  • $.XXX $.ajax() 类的方法
  • 使用$来调用的方法,不适用选择,不会自动传递参数,返回值会有不同;比如:$.trim():去掉前后空格;$.each():遍历数组和对象;$.extend(前对象,后对象):使用后对象的属性改变前对象的属性,都有相同属性的前提下

效率

原生js的效率要比jQuery

 window.onload=function(){
            var oDiv=document.getElementById('div');
            alert('我是原生JS')
        };

 $(document).ready(function(){
            console.log($('.div1'))
            alert('我是jquery')
        })
// 或者这种写法
$(function(){
  alert('我是jquery')
//....js代码})

从上面的代码可以知道,先弹出我是jquery,接着在弹出我是原生js,这就说明jquery的效率要比原生的js效率高,它们获取DOM元素的方式也不一样;在此可以知道:Window.onload是等页面所有的内容(视频,音频,DOM结构,图片)都加载完成的时候,才执行js代码;而$(document).ready(function(){js代码})是只要DOM结构加载完成,就开始执行js代码

选择器

  • 基本的选择器
    • $('#div')
    • $('.div')
    • $('div')
    • $('#div1 .div2 li')
    • $('.div1,.div2'):同时选择多个
  • 特有的表达式选择器(伪选择器)
    • $('div:first'):所有的div标签中的第一个;其效果和$('div').first()这个方法一样
    • $('div:eq(1)'):可以拿到开头和结尾的元素,也可以拿到中间的元素
    • $('div:not(:first)'):选中除去第一个的所有的元素
    • $('div:even'):偶数选择器,隔行换色
    • $('div:odd'):奇数选择器,隔行换色; 求余来计算隔行变色
    • $('div:lt(3)'):索引值小于3的所有元素 对应的有gt(3)
    • $(':input')input标签选择器
    • $(':input[type]')/$(':input[type ^=t]')input标签的属性选择器;属性值以什么开头的选择器

jQuery实现的选项卡

以前使用过原生的JS实现了选项卡,基本上的思路是:获取要操作的元素,for循环遍历,在遍历的时候执行事件操作,当然在循环的时候执行异步的事件操作的时候,循环里面的i值是错误的,可以通过闭包或者自定义属性的方法来把正确的i值传递给事件,当点击的时候,先把所有的样式去掉,然后给点击元素加上点击的样式,对应的内容区域显示

  • html代码
<div class="wrap">
    <button class="active">按钮1</button>
    <button>按钮2</button>
    <button>按钮3</button>
    <div class="show">内容1</div>
    <div>内容2</div>
    <div>内容3</div>
</div>
  • css代码
       .wrap{
            width: 600px;
            height:300px;
            font-size: 20px;
        }
        .wrap button{
            width: 200px;
            height: 40px;
            float: left;
            font-size: 20px;
        }
        .wrap button.active{
            background: lightblue;
        }
        .wrap div{
            width: 100%;
            height: 260px;
            clear: both;
            display: none;
            background: lightblue;
        }
        .wrap div.show{
            display: block;
        }
  • js代码
$('button').click(function(){   
      $(this).addClass('active').siblings('button').removeClass('active'); // 按钮点击的时候给其添加active样式,并且其余的兄弟元素除掉active样式
$('.wrap div').eq($(this).index()).addClass('show').siblings('div').removeClass('show'); 
    })

取值赋值合体

  • .attr():里面可以传入一个属性(获取属性值)或者一个键值对(给属性设置属性值),或者是包含多个键值对的对象,对于那些需要单位的属性值不用加单位
  • .css():效果同上
  • .val():不写参数的时候是获取对应的value值,写入参数的时候是设置value值,表单元素的值
  • .html():效果同上

区分val()html()

  • val针对表单元素的值;input textarea select
  • html针对普通标签元素的值;div p span h1

jqueryjs之间的转换

jsjQuery是可以转换的,把js转为jquery就是把js代码用$(JS对象)包裹起来,jquery转js就是把获取的一堆jquery对象在后面[index] 或者 get(inedx)

 var $aDiv=$('div');// 这个是获取的jquery对象,一堆的div元素 ;但是不用遍历,直接使用`css`方法:$aDiv.css('background','bule');

// jquery转为js
$aDiv.get(i) 或者 $aDiv[i]  -----> 接着js转为`jQuery`对象:$( $aDiv[i])才能继续使用`jQuery`对象的方法来操作`CSS`:$( $aDiv[i]).css('background','red')

jQuery的DOM方法

  • parent
  • parents
  • children
  • next
  • nextAll
  • prev
  • prevAll
  • index
  • siblings

动态创建一个元素:

$('<div></div>') 或者 $('<div>')

创建的元素插入到页面中:功能相同,针对的主体不一样

  • 父级元素.append(元素) -----返回的this是作用在父级元素上面
  • 元素.appendTo(父级元素)-----返回的this是作用在元素上面

对应的有:

  • insertAfter:在后面插入
  • after
  • insertBefore:在前插入
  • before
  • prependTo
  • prepend:插入到容器的前面
  • remove():移除

获取body的方法:$('body')

jQuery的数据交互

$.ajax({})

表格操作提交,一定要有name值
<form action='提交的地址:www.baidu.com' target='_blank'>
   <lable for='username'>
   用户名:<input type='text' name='这个地方告诉后台用户输入了什么数据username' id='就是跟lable中的for一样,这样才能点击lable输入框聚焦:username'>
</lable>

  <lable for='password'>
   密码:<input type='password' name='这个地方告诉后台用户输入了什么数据password' id='就是跟lable中的for一样,这样才能点击lable输入框聚焦:password'>
</lable>

<p><input type='submit' value='提交数据'></p>
</form>
  • js代码,数据交互
$('input[type=button]').click(function(){
    $.ajax({
       url:'json/data.txt?'+Math.random(),// 请求地址,加随机数,来清除缓存
   
type:'get',// 请求方式
dataType:'json',// 返回数据的格式
async:  true,// 是否异步  不写默认异步(true),同步(false)
data:`username=${$('#username').val()}&password=${$('#password').val()}`,// 模版字符串拼接(手写) 给后台传递的参数,获取提交的数据
// data:$('form').serialize(); 表格序列化,一样的功能,帮忙实现了一个key=value的键值对的字符串
success:function(val){
    var data=val;
    console.log(data);
 }, // 请求成功
 error:function(val){
     // 请求失败 
}

     })
 })

动画

  • hide()
  • show()
  • toggle():这个功能包括上面两个功能,js可以使用状态判断的方法实现前面两个功能
  • slideUp():百叶窗的效果,收;这个方法是用定时器写的,所以使用这个方法之前要先关闭不必要的定时器:元素.stop().slideUp()
  • slideDown():拉,同上
  • slideToggle():同时实现上面的功能,也要停止多余的定时器
  • fadeOut(2000,function(){ }):淡出,可以传入参数,函数,运动的时间
  • fadeIn():淡入,也有关掉多余的定时器
  • fadeToggle():
  • animate(target,time,effect,callback):参数可以直接传入css对象{height:200,width:300},时间,运动,事件函数
  • stop():开启运动之前,先停止运动

事件绑定

  • DOM0级事件

    同一个元素身上,只能绑定一个事件,否者后面的会覆盖前面的事件(原生JS)

  • jQuery中绑定事件

  • on(事件,事件行为):绑定事件(可以执行多次)----$('div').on('click',fn2)
  • one(type,fn):绑定事件(只能执行一次)
  • off(什么事件,事件的行为(具体的函数,有名函数)):解除绑定(只能解除有名字的函数)----$('div').off('click',fn2)

插件(直接调用就可以)

  • 给类创建插件(静态方法的添加,直接给类添加的)工具函数
    • $.extend({tab:function(){}})
选项卡插件
// 作为一个插件,就是要成为jquery的组件,方法就应该不能写死
// 静态方法的添加,extend:扩展
$.extend({
      tab:function(ele){
          var $aBtn=$(ele).find('button');
          var $aDiv=$(ele).find('div');
          $aBtn.click(function){
              $(this).addClass('active').siblings('button').removeClass('active');
              $aDiv.eq($(this).index()).addClass('show').siblings().removeClass('show');
           }
       }
   })

// 调用插件,直接在代码里面引入js代码,执行`$.tab(.wrap)`就行,选项卡插件

  • 给实例添加,给原型上面添加插件
    • $.fn.extend({})
$.fn.extend({
      tab:function(){
          var $aBtn=this.find('button');
          var $aDiv=this.find('div');
          $aBtn.click(function){
              $(this).addClass('active').siblings('button').removeClass('active');
              $aDiv.eq($(this).index()).addClass('show').siblings().removeClass('show');
           }
       }
   })

// 在代码里面调用,引入js文件,执行`$('.tab1').tab()`,实例调用

jQueryeach()方法

想要知道一个方法传入了什么参数,使用arguments打印出来;想知道参数是原生的js对象还是jQuery对象,把参数打印出来,原生js对象是标签之类的,只有foreach()方法来遍历数组对象,jQuery对象是数组之类的

  • 传入两个参数

    • item (索引值对应的对象)
    • index (索引值)
  • $.each(要变量的对象,callback回调函数(Index,item){})

    • 类的方法
    • 可以遍历jQuery对象
    • 也可以遍历原生的数组,原生的js对象
  • 实例.each(callback回调函数(index,item){})

    • 实例的方法 $('li')返回的就是实例
    • 只能遍历jQuery对象
  • map()的用法和each()差不多,就是参数的位置不一样,正好相反

相关文章

  • 前端笔记1.2--jQuery

    4.jQuery jQueryHelloWord体验 ​​ ​​ jQuery对象与DOM对象 ​​ DOM处理:...

  • JQUERY UI使用初体验

    JQUERY UI使用初体验:JQUERY UI网址:https://jqueryui.com/ 相关文件下载地址...

  • 用 jQuery 做个轮播

    初次体验jQuery 之后,体验一下jQuery强大之处,做一个简单的轮播,实现图片切换。 点击按钮切换轮播 页面...

  • jQuery体验

    jQuery是一个轻量级的js库,jQuery的所有功能都可以通过JavaScript进行访问,兼容大多数浏览器,...

  • jQuery基础入门

    jQuery基础(一)——样式篇 1-2环境搭建 1-3 jQuery HelloWorld体验 $(docume...

  • jQuery-选择器的使用一

    01-体验jquery.html 02-如何使用jquery.html 03-入口函数.html 04-jquer...

  • jQuery 初体验

    什么是JQ? 一个优秀的JS库 写越少的代码,做越多的事情 JQ的好处? 简化JS的复杂操作 不再需要关心兼容性 ...

  • jQuery初体验

    作业题 HTML代码 CSS代码 JS代码 jQuery 接受旧节点,返回新的对象,新API调用的还是DOM得AP...

  • jQuery初体验

    1. 封装一个函数 1.1 再封装一个 代码优化守则:如果出现类似的代码,就存在优化的可能 2. 命名空间 2.1...

  • 深入解析jquery实现原理第一章

    JQuery是一款非常优秀的JavaScript库,极大地提升了前端js开发体验,所以最近我在看jquery的源码...

网友评论

    本文标题:jQuery体验

    本文链接:https://www.haomeiwen.com/subject/runlqxtx.html