jQuery库的简单使用(含ajax、jsonp)

介绍

jQuery是目前使用最广泛的javascript函数库。一个js文件,页面用script标签引入这个js文件就可以使用。

加载

将获取元素的语句写到页面头部,会因为元素还没有加载而出错,jquery提供了ready方法解决这个问题,它的速度比原生的 window.onload 更快。

  • $(document).ready(function(){
         ......
    });
    
    也可以简写为
    $(function(){ ...... });

选择器

jquery用法思想:选择某个网页元素,然后对它进行某种操作

  • 选择规则和css样式相同,使用length属性判断是否选择成功
    $(document) //选择整个文档对象
    $('li') //选择所有的li元素
    $('#myId') //选择id为myId的网页元素
    $('.myClass') // 选择class为myClass的元素
    $('input[name=first]') // 选择name属性等于first的input元素
    $('#ul1 li span') //选择id为为ul1元素下的所有li下的span元素
    
    //对选择集修饰过滤
    $('#ul1 li:first') //选择id为ul1元素下的第一个li
    $('#ul1 li:odd') //选择id为ul1元素下的li的奇数行
    $('#ul1 li:eq(2)') //选择id为ul1元素下的第3个li
    $('#ul1 li:gt(2)') // 选择id为ul1元素下的前三个之后的li
    $('#myForm :input') // 选择表单中的input元素
    $('div:visible') //选择可见的div元素
    
    //对选择集函数过滤
    $('div').has('p'); // 选择包含p元素的div元素
    $('div').not('.myClass'); //选择class不等于myClass的div元素
    $('div').filter('.myClass'); //选择class等于myClass的div元素
    $('div').first(); //选择第1个div元素
    $('div').eq(5); //选择第6个div元素
    
    //选择集转移
    $('div').prev('p'); //选择div元素前面的第一个p元素
    $('div').next('p'); //选择div元素后面的第一个p元素
    $('div').closest('form'); //选择离div最近的那个form父元素
    $('div').parent(); //选择div的父元素
    $('div').children(); //选择div的所有子元素
    $('div').siblings(); //选择div的同级元素
    $('div').find('.myClass'); //选择div内的class等于myClass的元素

节点操作

思想:同一个函数完成取值和赋值

  • css():取出或设置行间样式
    // 获取div的样式
    $("div").css("width");
    $("div").css("color");
    
    //设置div的样式
    $("div").css("width","30px");
    $("div").css("height","30px");
    $("div").css({fontSize:"30px",color:"red"});

    注意:选择器获取的多个元素,获取信息获取的是第一个

  • 操作样式类名
    $("#div1").addClass("divClass2") //为id为div1的对象追加样式divClass2
    $("#div1").removeClass("divClass")  //移除id为div1的对象的class名为divClass的样式
    $("#div1").removeClass("divClass divClass2") //移除多个样式
    $("#div1").toggleClass("anotherClass") //重复切换anotherClass样式
  • html():取出或设置html内容
  • text():取出或设置text文本
  • val():获取节点的value值
  • attr():取出或设置某个属性
  • removeAttr():删除元素属性
  • empty():清空元素节点
  • append()和appendTo():元素内部后面插入节点
    var $span = $('<span>这是一个span元素</span>');  //创建节点格式: $('节点内容')
    $('#div1').append($span);
  • prepend()和prependTo():在现存元素的内部,从前面插入元素
  • after()和insertAfter():在现存元素的外部,从后面插入元素
  • before()和insertBefore():在现存元素的外部,从前面插入元素
  • remove():删除节点元素
  • prop():获取或设置元素状态
    //设置input框checked属性
    $('#check').prop({checked:false});
    //设置input框disabled属性
    $('#test').prop('disabled',true)
    //获取input框disabled属性
    $('#test').prop('disabled')
  • is():判断
    $('#stop').is("span") //返回true或false

遍历

  • 对象.each(callback)
    $("img").each(function(){
      $(this).toggleClass("example");
    });
  • $.each(对象,callback)
    $.each($('div'),function(index, el){
      alert($(this).attr('class'));
    });

    回调函数有两个形参,第一个是索引,第二个是元素对象本身

事件

  • 事件函数列表
    blur() 元素失去焦点
    focus() 元素获得焦点
    change() 表单元素的值发生变化
    click() 鼠标单击
    dblclick() 鼠标双击
    mouseover() 鼠标进入(进入子元素也触发)
    mouseout() 鼠标离开(离开子元素也触发)
    mouseenter() 鼠标进入(进入子元素不触发)
    mouseleave() 鼠标离开(离开子元素不触发)
    hover() 同时为mouseenter和mouseleave事件指定处理函数
    mouseup() 松开鼠标
    mousedown() 按下鼠标
    mousemove() 鼠标在元素内部移动
    keydown() 按下键盘
    keypress() 按下键盘
    keyup() 松开键盘
    load() 元素加载完毕
    ready() DOM加载完成
    resize() 浏览器窗口的大小发生改变
    scroll() 滚动条的位置发生变化
    select() 用户选中文本框中的内容
    submit() 用户递交表单
    toggle() 根据鼠标点击的次数,依次运行多个函数
    unload() 用户离开页面
  • 事件绑定
    • 方式1
      $('#btn1').click(function(){
          // 内部的this指的是原生对象
          // 使用jquery对象用 $(this)
      })
    • 方式2
      $(function(){
          $('#div1').bind('mouseover click', function(event) {
              alert($(this).html());
          });
      });
  • 取消绑定
    $(function(){
        $('#div1').bind('mouseover click', function(event) {
            alert($(this).html());
            //取消绑定 $(this).unbind();
            $(this).unbind('mouseover');
        });
    });
  • 主动触发事件
    • 可使用jquery对象上的trigger方法来触发对象上绑定的事件。
  • 自定义事件
    • 除了系统事件外,可以通过bind方法自定义事件,然后用tiggle方法触发这些事件。
      //绑定hello事件
      $('#div1').bind("hello",function(){
          alert("hello world!");
      });
      
      //触发hello事件
      $('#div1').trigger("hello");

事件冒泡

  • 什么是事件冒泡
    • 在一个对象上触发某类事件(比如单击click事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,直至它被处理(所有父级对象中绑定click事件都会被触发),或者它到达了对象层次的最顶层,即document对象(有些浏览器是window)。
  • 事件冒泡作用
    • 事件冒泡允许多个操作被集中处理,它还可以让你在对象层的不同级别捕获事件。
  • 阻止事件冒泡
    • 通过 event.stopPropagation() 来阻止 
      $(function(){
          var $box1 = $('.father');
          var $box2 = $('.son');
          var $box3 = $('.grandson');
          $box1.click(function() {
              alert('father');
          });
          $box2.click(function() {
              alert('son');
          });
          $box3.click(function(event) {
              alert('grandson');
              event.stopPropagation();
          });
          $(document).click(function(event) {
              alert('grandfather');
          });
      })
  • 阻止默认行为
    • event.preventDefault();
    • 示例:阻止右键菜单
      $(document).contextmenu(function(event) {
          event.preventDefault();
      });
  • 合并阻止默认行为和冒泡
    • 实际开发中,一般把阻止冒泡和阻止默认行为合并起来写,合并写法可以用
      // event.stopPropagation();
      // event.preventDefault();
      
      // 合并写法:
      return false;

事件委托

事件委托就是利用冒泡的原理,把事件加到父级上,通过判断事件来源的子集,执行相应的操作,事件委托首先可以极大减少事件绑定次数,提高性能;其次可以让新加入的子元素也可以拥有相同的操作。

  • $(function(){
        $ali = $('#list li');
        $ali.click(function(event) {
            $(this).css({background:'red'});
        });
    })

    需要绑定多次,性能不高

  • 事件委托写法
    $(function(){
        $list = $('#list');
        $list.delegate('li', 'click', function(event) {
            $(this).css({background:'red'});
        });
    })
  • 取消事件委托
    //上面的例子可写成 
    $list.undelegate();

 

上一篇:跨域问题 以及jsonp方法举例


下一篇:问题解决:web前端跨域请求