jQuery 教程

来源:互联网 发布:139邮箱端口 编辑:程序博客网 时间:2024/05/21 07:04

大纲

一、jQuery简介
二、jQuery 和Dom关系及jQuery版本
1、jQuery版本
2、jQuery和Dom转换
三、jQuery 选择器
1.1、基本
1.2、层级
2、基本筛选器
3、属性选择器
4.1、表单
4.2、表单对象属性
四:jQuery 示例
1、示例:全选、反选、取消
2.1、筛选器示例:左侧菜单点击展开内容
2.2、筛选器
3.1、jQuery 文本、样式以、属性、文档处理操作
3.2、示例:模态对话框
4、示例:tab切换菜单
5、示例:点赞以及jQuery css操作
6、示例:拖动面板以及位置操作
7.1、jQuery绑定事件及示例
7.2、JQuery事件之阻止事件发生 及示例:表单验证
五、jQuery 扩展

一、jQuery简介

jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。

jQuery的核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口;具有高效灵活的css选择器,并且可对CSS选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件。jQuery兼容各种主流浏览器,如IE 6.0+、FF 1.5+、Safari 2.0+、Opera 9.0+等。

模块 《=》类库
DOM/BOM/JavaScript的类库,所以jQuery也分为两部分:

  • 查找元素
  • 操作元素

jQuery 中文文档

jQuery官网地址

二、jQuery 和Dom关系及jQuery版本

1、jQuery版本

当前jQuery版本:这里使用的1.x系列最新版本

1.x系列 兼容性最好,1系列当前最新1.12
2.x系列
3.x系列 最新的版本,IE低版本不再支持

下载的时候有两个版本:一个标准版、一个min压缩版。测试时使用标准版,线上建议使用压缩版。

下载后,引入jQuery类库:

<head>    <link rel="stylesheet" href="1.css">    <!--引入css文件-->    <style>        /* 写css样式 */    </style>    <script src="jquery-1.12.4.js"></script>    <!--引入jQuery类库,JavaScript一般放到body尾部-->    <script>        // script 代码。调用使用 jQuery.xxx        // jQuery.xxx  <==>  $.xxx  $等同于jQuery关键字    </script></head>

2、jQuery和Dom转换

> $('#i1')     // jQuery获取[<input type="text" id="i1">]> document.getElementById('i1')  // dom获取<input type="text" id="i1">> $('#i1')[0]  // jQuery对象转换为dom对象<input type="text" id="i1">> $(document.getElementById('i1')) // dom对象转换为jQuery对象[<input type="text" id="i1">]// 转换:    // jquery对象[0]   => Dom对象    // Dom对象         => $(Dom对象)

三、jQuery 选择器

1.1、基本

    1. id 选择器

      $('#id')

    1. class 选择器

      <div class='c1'></div>

      $(".c1")

    1. 标签 选择器

      <a>f</a>

      $('a')

    1. 组合

      $(' a, .c1, #i10 ')

1.2、层级

  • $(‘#i10 a’) 子子孙孙(i10里所有a标签)
  • $(‘#i10>a’) 儿子(只取子标签里的a标签)
  • prev + next 下一个标签
  • prev ~ siblings 兄弟标签

2、基本筛选器

:first          // 获取匹配的第一个元素:last:not(selector)  //去除所有与给定选择器匹配的元素// 在jQuery 1.3中,已经支持复杂选择器了(例如:not(div a) 和 :not(div,a)):even           // 匹配所有索引值为偶数的元素,从 0 开始计数:odd            // 匹配所有索引值为奇数的元素,从 0 开始计数:eq(index)      :gt(index)      :lt(index) // 等于           大于          小于:header         // 匹配如 h1, h2, h3之类的标题元素

3、属性选择器

之前的内容,没有对自定义属性进行查找的,如:<a fgf='22'></a>

jQuery 支持对自定义属性的获取查找

$('[fgf]')       // 具有fgf属性的所有标签$('[fgf="22"]')  // fgf属性等于22的标签[attribute!=value][attribute^=value][attribute$=value][attribute*=value][attrSel1][attrSel2][attrSelN]

4.1、表单

<input type='text'/><input type='text'/><input type='file'/><input type='password'/>
$("input[type='text']")    // 不使用表单选择器,也能实现$(':text')             // 使用表单选择器

4.2、表单对象属性

:enabled        // 可编辑,默认就是:disabled       // 不可编辑:checked        // 被选中(单选框、复选框):selected       // 被选中(下拉框)

四:jQuery 示例

1、示例:全选、反选、取消

相关知识点:

- 选择器- .prop    $('#tb:checkbox').prop('checked');        获取值    $('#tb:checkbox').prop('checked', true);  设置值- .each    jQuery方法内置循环: $('#tb:checkbox').xxxx- $('#tb:checkbox').each(function(k){        // k当前索引        // this,DOM,当前循环的元素 $(this)    })- 三元运算  var v = 条件 ? 真值 : 假值
<body>    <input type="button" value="全选" onclick="checkAll();" />    <input type="button" value="反选" onclick="reverseAll();" />    <input type="button" value="取消"  onclick="cancelAll();"/>    <table border="1">        <thead>            <tr>                <th>选项</th><th>IP</th><th>PORT</th>            </tr>        </thead>        <tbody id="tb">            <tr>                <td><input type="checkbox" /></td>                <td>1.1.1.1</td>                <td>80</td>            </tr>            <tr>                <td><input type="checkbox" /></td>                <td>1.1.1.1</td>                <td>80</td>            </tr>            <tr>                <td><input type="checkbox" /></td>                <td>1.1.1.1</td>                <td>80</td>            </tr>        </tbody>    </table>    <script src="jquery-1.12.4.js"></script>    <script>        function checkAll() {            $('#tb :checkbox').prop('checked',true);        }       // .prop 专门对checked操作        function cancelAll() {            $('#tb :checkbox').prop('checked',false);        }        function reverseAll() {            $(':checkbox').each(function(k){  // .each 循环选中的每一个元素                /*  Dom实现                if(this.checked){                    this.checked = false;                }else{                    this.checked = true;                } */                // this,代指当前循环的每一个元素;三元运算var v = 条件? 真值:假值                var v = $(this).prop('checked')?false:true;                // console.log(k,this);                $(this).prop('checked',v);            })        }    </script></body>

2.1、筛选器示例:左侧菜单点击展开内容

筛选器:

$(this).next()         // 下一个$(this).prev()         // 上一个$(this).parent()       // 父$(this).children()     // 孩子$('#i1').siblings()    // 兄弟(不包含自己)$('#i1').find('#i1')   // 子子孙孙中查找

添加移除样式:

$('#i1').addClass(..)  // 添加样式$('#i1').removeClass(..)// 移除样式

示例:

<head>    <style>        .header{            background-color: royalblue;        }        .content{            min-height: 70px;        }        .hide{            display: none;        }    </style></head><body>    <div style="height:400px;width: 200px;border: 1px solid #dddddd">        <div class="item">            <div class="header">标题一</div>            <div id="i1" class="content hide">内容</div>        </div>        <div class="item">            <div class="header">标题二</div>            <div class="content hide">内容</div>        </div>        <div class="item">            <div class="header">标题三</div>            <div class="content hide">内容</div>        </div>    </div>    <script src="jquery-1.12.4.js"></script>    <script>        $('.header').click(function(){           // 当前点击的标签 $(this); .next 获取某个标签的下一个标签           // $(this).next().removeClass('hide');  移除hide属性           // $(this).parent().siblings().find('.content').addClass('hide')           $(this).next().removeClass('hide').parent().siblings().find('.content').addClass('hide')           // 链式编程        })    </script></body>

2.2、筛选器

$('#i1').next()// 下一个$('#i1').prev()    //往上找$('#i1').nextAll()// 下面所有   $('#i1').prevAll()$('#i1').nextUntil('#ii1')// 下面直到哪里 $('#i1').prevUntil('#ii1')$('#i1').parent()          // 父标签$('#i1').parents()         // 取得一个包含着所有匹配元素的祖先元素的元素集合$('#i1').parentsUntil()        //查找当前元素的所有的父辈元素,直到遇到匹配的那个元素为止。$('#i1').children()$('#i1').siblings()$('#i1').find()$('li').eq(1)   <——>  $('li:eq(1)')first()last()hasClass(class)                     

3.1、jQuery 文本、样式以、属性、文档处理操作

  • 文本操作:
$(..).text()            // 获取文本内容$(..).text("<a>1</a>")  // 设置文本内容$(..).html()           // 获取$(..).html("<a>1</a>")  // 设置$(..).val()                // 获取$(..).val(..)          // 设置
  • 样式操作:

addClass
removeClass
toggleClass 比如实现网页开关灯功能

开关灯示例:

<head>    <style>        .hide{            display: none;        }    </style></head><body>    <input type='checkbox' id='i2'  />    <input id="i1" type="button" value="开关" />    <div class="c1 hide">asdfasdf</div>    <script src="jquery-1.12.4.js"></script>    <script>        $('#i1').click(function(){//            if($('.c1').hasClass('hide')){//                $('.c1').removeClass('hide');//            }else{//                $('.c1').addClass('hide');//            }            $('.c1').toggleClass('hide');    // 一句搞定        })    </script></body>
  • 属性操作:
// 专门用于做自定义属性$(..).attr('n')          // 获取$(..).attr('n','v')      // 设置$(..).removeAttr('n')    // 删除<input type='checkbox' id='i1'  />// 专门用于chekbox,radio  jQuery1、2版本checkbox使用attr的话有bug,所以用prop$(..).prop('checked')$(..).prop('checked', true)
  • 文档处理:
append    // 往后加prepend   // 往前加after     // 紧挨着后面before    // 紧挨着前面remove    // 删除empty     // 只清空内容clone     // 克隆一份数据

3.2、示例:模态对话框

<head>    <meta charset="UTF-8">    <title>Title</title>    <style>        .hide{            display: none;        }        .modal{            position: fixed;            top: 50%;            left: 50%;            width: 500px;            height: 400px;            margin-left: -250px;            margin-top: -250px;            background-color: #eeeeee;            z-index: 10;        }        .shadow{            position: fixed;            top: 0;            left: 0;            right: 0;            bottom: 0;            opacity: 0.6;            background-color: black;            z-index: 9;        }    </style></head><body>    <a onclick="addElement();">添加</a>    <table border="1" id="tb">        <tr>            <td target="hostname">1.1.1.11</td>            <td target="port">80</td>            <td target="ip">80</td>            <td>                <a class="edit">编辑</a> | <a class="del">删除</a>            </td>        </tr>        <tr>            <td target="hostname">1.1.1.12</td>            <td target="port">80</td>            <td target="ip">80</td>            <td>                <a class="edit">编辑</a> | <a class="del">删除</a>            </td>        </tr>        <tr>            <td target="hostname">1.1.1.13</td>            <td target="port">80</td>            <td target="ip">80</td>            <td>                <a class="edit">编辑</a> | <a class="del">删除</a>            </td>        </tr>    </table>    <div class="modal hide">        <div>            <input name="hostname" type="text"  />            <input name="port" type="text" />            <input name="ip" type="text" />        </div>        <div>            <input type="button" value="取消" onclick="cancelModal();" />            <input type="button" value="确定" onclick="confirmModal();" />        </div>    </div>    <div class="shadow hide"></div>    <script src="jquery-1.12.4.js"></script>    <script>        $('.del').click(function () {            $(this).parent().parent().remove();        });        function  confirmModal() {            var tr = document.createElement('tr');            var td1 = document.createElement('td');            td1.innerHTML = "11.11.11.11";            var td2 = document.createElement('td');            td2.innerHTML = "8001";            $(tr).append(td1);            $(tr).append(td2);            $('#tb').append(tr);            $(".modal,.shadow").addClass('hide');        }        function  addElement() {            $(".modal,.shadow").removeClass('hide');        }        function cancelModal() {            $(".modal,.shadow").addClass('hide');            $('.modal input[type="text"]').val("");        }        $('.edit').click(function(){            $(".modal,.shadow").removeClass('hide');            // this            var tds = $(this).parent().prevAll();            tds.each(function () {                // 获取td的target属性值                var n = $(this).attr('target');                // 获取td中的内容                var text = $(this).text();                var a1 = '.modal input[name="';                var a2 = '"]';                var temp = a1 + n + a2;                $(temp).val(text);            });//            var port = $(tds[0]).text();//            var host = $(tds[1]).text();////            $('.modal input[name="hostname"]').val(host);//            $('.modal input[name="port"]').val(port);            // 循环获取tds中内容            // 获取 <td>内容</td> 获取中间的内容            // 赋值给input标签中的value        });    </script></body>

4、示例:tab切换菜单

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title>    <style>        .hide{            display: none;        }        .menu{            height: 38px;            background-color: #eeeeee;            line-height: 38px;        }        .active{            background-color: brown;        }        .menu .menu-item{            float: left;            border-right: 1px solid red;            padding: 0 5px;            cursor: pointer;        }        .content{            min-height: 100px;            border: 1px solid #eeeeee;        }    </style></head><body>    <div style="width: 700px;margin:0 auto">        <div class="menu">            <div  class="menu-item active" a="1">菜单一</div>            <div  class="menu-item" a="2">菜单二</div>            <div  class="menu-item" a="3">菜单三</div>        </div>        <div class="content">            <div b="1">内容一</div>            <div class="hide"  b="2">内容二</div>            <div class="hide" b="3">内容三</div>        </div>    </div>    <script src="jquery-1.12.4.js"></script>    <script>        $('.menu-item').click(function(){            $(this).addClass('active').siblings().removeClass('active');            var target = $(this).attr('a');            $('.content').children("[b='"+ target+"']").removeClass('hide').siblings().addClass('hide');        });    </script></body></html>

上面是通过自定义属性实现的,下面不用自定义属性,用索引也能实现。

index 获取索引位置

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title>    <style>        .hide{            display: none;        }        .menu{            height: 38px;            background-color: #eeeeee;            line-height: 38px;        }        .active{            background-color: brown;        }        .menu .menu-item{            float: left;            border-right: 1px solid red;            padding: 0 5px;            cursor: pointer;        }        .content{            min-height: 100px;            border: 1px solid #eeeeee;        }    </style></head><body>    <div style="width: 700px;margin:0 auto">        <div class="menu">            <div  class="menu-item active" >菜单一</div>            <div  class="menu-item" >菜单二</div>            <div  class="menu-item" >菜单三</div>        </div>        <div class="content">            <div >内容一</div>            <div class="hide" >内容二</div>            <div class="hide">内容三</div>        </div>    </div>    <script src="jquery-1.12.4.js"></script>    <script>        $('.menu-item').click(function(){            $(this).addClass('active').siblings().removeClass('active');            $('.content').children().eq($(this).index()).removeClass('hide').siblings().addClass('hide');        });    </script></body></html>

5、示例:点赞以及jQuery css操作

Query css处理操作

            $('t1').css('样式名称', '样式值')            点赞:                 - $('t1').append()                 - $('t1').remove()                 - setInterval                 - 透明度 10                 - position                 - 字体大小,位置

点赞示例

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title>    <style>        .container{            padding: 50px;            border: 1px solid #dddddd;        }        .item{            position: relative;            width: 30px;        }    </style></head><body>    <div class="container">        <div class="item">            <span></span>        </div>    </div>    <div class="container">        <div class="item">            <span></span>        </div>    </div>    <script src="jquery-1.12.4.js"></script>    <script>        $('.item').click(function () {            AddFavor(this);        });        function AddFavor(self) {            // DOM对象            var fontSize = 15;            var top = 0;            var right = 0;            var opacity = 1;            var tag = document.createElement('span');            $(tag).text('+1');            $(tag).css('color','green');            $(tag).css('position','absolute');            $(tag).css('fontSize',fontSize + "px");            $(tag).css('right',right + "px");            $(tag).css('top',top + 'px');            $(tag).css('opacity',opacity);            $(self).append(tag);            var obj = setInterval(function () {                fontSize = fontSize + 10;                top = top - 10;                right = right - 10;                opacity = opacity - 0.1;                $(tag).css('fontSize',fontSize + "px");                $(tag).css('right',right + "px");                $(tag).css('top',top + 'px');                $(tag).css('opacity',opacity);                if(opacity < 0){                    clearInterval(obj);                    $(tag).remove();                }            }, 40);        }    </script></body></html>

6、示例:拖动面板以及位置操作

  • 位置操作:
$(window).scrollTop()   // 获取windows滑轮位置  // 注意是谁的滑轮$(window).scrollTop(0)  // 设置windows滑轮位置scrollLeft([val])       // 左右滚动滑轮设置$('#i1').offset()      // 获取标签位置offset().left           // 指定标签在html中的坐标位置offset().top            // 指定标签在html中的坐标位置
<!--    position()      指定标签相对父标签(找到relative)标签的坐标--><div style='relative'>    <div>        <div id='i1' style='position:absolute;height:80px;border:1px'></div>    </div></div><script>  // 纯高度,边框,外边距,内边距$('i1').height()           // 获取标签的高度 纯高度$('i1').innerHeight()      // 获取自身高度+padding;$('i1').outerHeight()      // 参数:false-->获取自身高度+padding+border;$('i1').outerHeight(true)  // 获取自身高度+padding+border+margin;</script>
  • 拖动面板示例:

注意这里直接使用#title方式不是太好。

<body>    <div style="border: 1px solid #ddd;width: 600px;position: absolute;">        <div id="title" style="background-color: black;height: 40px;"></div>        <div style="height: 300px;"></div>    </div><script type="text/javascript" src="jquery-1.12.4.js"></script><script>    $(function(){        $('#title').mouseover(function(){            $(this).css('cursor','move');        });        $("#title").mousedown(function(e){            //console.log($(this).offset());            var _event = e || window.event;            var ord_x = _event.clientX;            var ord_y = _event.clientY;            var parent_left = $(this).parent().offset().left;            var parent_top = $(this).parent().offset().top;            $('#title').on('mousemove', function(e){                var _new_event = e || window.event;                var new_x = _new_event.clientX;                var new_y = _new_event.clientY;                var x = parent_left + (new_x - ord_x);                var y = parent_top + (new_y - ord_y);                $(this).parent().css('left',x+'px');                $(this).parent().css('top',y+'px');            })        });        $("#title").mouseup(function(){            $("#title").off('mousemove');        });    })</script></body>

7.1、jQuery绑定事件及示例

  • 绑定事件知识点:
  // DOM: 三种绑定方式  // jQuery:四种    // 第一种:    $('.c1').click()    $('.c1').....    // 第二种:    $('.c1').bind('click',function(){  // 绑定    })    $('.c1').unbind('click',function(){  // 解绑    })    // 第三种:*******有特殊功能,看示例(一开始并没有绑定事件,当点击的时候才给绑定事件)    $('.c').delegate('a', 'click', function(){  // 绑定、委托    })    $('.c').undelegate('a', 'click', function(){  // 解绑    })    // 第四种:上面调用的实际上都是这种    $('.c1').on('click', function(){    })    $('.c1').off('click', function(){    })
  • 示例:添加内容,并自动绑定事件
  <body>      <input id="t1" type="text" />      <input id="a1" type="button" value="添加" />      <ul id="u1">          <li>1</li>          <li>2</li>      </ul>  <script src="jquery-1.12.4.js"></script>      <script>          $('#a1').click(function () {              var v = $('#t1').val();              var temp = "<li>" + v + "</li>";              $('#u1').append(temp);          });  //      第三种绑定方式          $('ul').delegate('li','click',function () {              var v = $(this).text();              alert(v);          })  //      第一种绑定方式  //        $('ul li').click(function () {  //            var v = $(this).text();  //            alert(v);  //        })  //      第二种绑定方式  //        $('ul li').bind('click',function () {  //            var v = $(this).text();  //            alert(v);  //        })  //      第四种绑定方式  //        $('ul li').on('click', function () {  //            var v = $(this).text();  //            alert(v);  //        })      </script>  </body>

7.2、JQuery事件之阻止事件发生 及示例:表单验证

a标签是不是默认有个onclick事件,如果再给绑定一个onclick事件会怎么样?

默认:先执行绑定事件,在执行a标签的默认事件。

阻止事件发生    return false# 当页面框架加载完成之后,自动执行$(function(){    $(...)})

示例:

<body>    <!--Dom方式:onclick里需要加return-->    <a onclick="return ClickOn()"  href="http://www.oldboyedu.com">走你1</a>    <!--jQuery方式:-->    <a id="i1" href="http://www.oldboyedu.com">走你2</a>    <script src="jquery-1.12.4.js"></script>    <script>        // Dom方式:        function ClickOn() {            alert(123);            return true;  // true:执行后面操作,dom绑定里需要加return        }        // jQuery方式:        $('#i1').click(function () {            alert(456);            return false;  // false:不执行后面操作        })    </script></body>
  • 示例:表单验证
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title>    <style>        .error{            color: red;        }    </style></head><body>    <!--功能:输入值:运行提交;未输入:不允许提交-->    <form id="f1" action="s5.html" method="POST">        <div><input name="n1" tex = "用户名" type="text" /></div>        <div><input name="n2" tex = "密码" type="password" /></div>        <div><input name="n3" tex = "邮箱" type="text" /></div>        <div><input name="n4" tex = "端口" type="text" /></div>        <div><input name="n5" tex = "IP" type="text" /></div>        <input type="submit" value="提交" />        <!--<img src="...">-->    </form>    <script src="jquery-1.12.4.js"></script>    <script>//        // 当页面框架加载完毕后,自动执行,比如加载图片,框加载后,图片还没加载,函数就执行了//        $(function(){////        });        $(function(){            // 当页面所有元素完全加载完毕后,执行            $(':submit').click(function () {                $('.error').remove();  // 先清空错误样式                var flag = true;  // 创建局部变量                $('#f1').find('input[type="text"],input[type="password"]').each(function () {                    var v = $(this).val();                    var n = $(this).attr('tex');                    if(v.length <= 0){                        flag = false;                        var tag = document.createElement('span');                        tag.className = "error";                        tag.innerHTML = n + "必填";                        $(this).after(tag);                        // return false;  // 加上false后,第一个不合法,后面不通过                    }                });                return flag;            });        });//        $(':submit').click(function () {//            var v = $(this).prev().val();//            if(v.length > 0){//                return true;//            }else{//                alert('请输入内容');//                return false//            }//        })    </script></body></html>

转载请务必保留此出处:http://blog.csdn.net/fgf00/article/details/53420313


五、jQuery 扩展

如果想自定义jQuery功能,可以如下定义:

  • $.extend $.方法
  • $.fn.extend $(..).方法
<body>    <script src="jquery-1.12.4.js"></script>    <script>        var v = $.wangsen();        alert(v);//        $('#i1').css()//        $.ajax()        // 第二种写法:.fn.extend        $.fn.extend({            "name1": function () {                return 'fgf00';            }        });        var v2 = $('#i1').hanyang();        alert(v);        // 第一种写法:.extend        $.extend({            'name2': function () {                return 'fgf01';            }        });        var v1 = $.wangsen();        alert(v);    </script></body>

如果引入第三方jQuery扩展,全局变量、扩展名,可能重复,因此使用还是都定义自执行函数。

(function (arg) {    var status = 1;    arg.extend({       'name': function () {           return 'fgf';       }    });})(jQu$ery);
0 0
原创粉丝点击