jQuery

jQuery

简介

jQuery是一个可以简单方便实现DOM操作的工具,是一个类库,类似于Python中的模块

功能:通过jQuery方法对HTML文档进行一系列的操作。

 jQuery版本

1、1.xx的版兼容IE678,官方只做BUG维护,功能不再新增。最终版本:1.12.4 (2016年5月20日)

2、2.xx版本不兼容IE678,官方只做BUG维护,功能不再新增。

3、3.xx版本不兼容IE678,只支持最新的浏览器。并且很多老的jQuery插件不支持3.x版。目前该版本是官方主要更新维护的版本。

4、压缩版(mini,js)与未压缩版本的功能一致,区别只在于文件大小

 jQuery基础语法

jQuery变量的声明通常需要在变量名之前加$,让人知道该变量是jQuery对象。

 jQuery对象

jQuery对象是通过jQuery包装DOM对象后产生的对象,它具有自己独有的方法。

jQuery对象与DOM对象可以相互转换,转换之后可以使用对方的对象方法对HTML进行操作。

查找标签方法

$().()等同于jQuery().()

标签选择器

#id选择器
$("#ID值");

#标签选择器
$('tagName');

#class类选择器
$('.className')

#交集选择器,选择两个条件同时成立的标签
$('div.c1')#选择class=c1的div标签

#并集选择器,选择满足以下条件中任意一个的所有标签
$('#d,.c1,p')#选择id=d的标签,具有class=c1的标签,标签是p的标签。

#所有元素选择器
$('*')#选择所有的标签
View Code

层级选择器

#后代选择器
$('a b');#处于a标签级别下的所有b标签,用空格分开。

#子类选择器
$('a>b');#处于a标签级别下一级别的所有b标签。

#毗邻单一弟弟选择器
$('a+b');#与a标签同一级别的紧挨着a标签的b标签。

#毗邻多个弟弟选择器
$('a~b');#与a标签同一级别的位于a标签之后的所有b标签。
View Code

基本筛选器

<div class="c1">
    <a href=""></a>
    <p class="c2"></p>
    <p class="c3"></p>
    <div class="c4"></div>
    <p class="c5"></p>
</div>
<div class="c6">
    <a href=""></a>
    <a href=""></a>
</div>

#查找满足条件的第一个
$('div>p:first');
#找出div标签子集中的第一个p标签,
#jQuery.fn.init [p.c2, prevObject: jQuery.fn.init(1)]

#查找满足条件的最后一个
$('div>p:last');
#找出div标签子集中最后一个p标签
#jQuery.fn.init [p.c5, prevObject: jQuery.fn.init(1)]

#查找索引号为指定数字的元素
$('div>p:eq(2)');
#找出div标签子集中的第三个p标签
#jQuery.fn.init [p.c5, prevObject: jQuery.fn.init(1)]

#匹配所有索引值为偶数的元素,从 0 开始计数
$('div>p:even');
#找出div标签子集中的索引为偶数的p标签,取出class=c2,class=c5的p标签。
#jQuery.fn.init(2) [p.c2, p.c5, prevObject: jQuery.fn.init(1)]

#匹配所有索引值为奇数的元素,从 0 开始计数
$('div>p:odd');
#找出div标签子集中的索引为奇数的p标签,取出class=c3的p标签。
#jQuery.fn.init [p.c3, prevObject: jQuery.fn.init(1)]

#匹配所有大于给定索引值的元素
$('div>p:gt(1)');
#jQuery.fn.init [p.c5, prevObject: jQuery.fn.init(1)]

#匹配所有小于给定索引值的元素
$('div>p:lt(1)');
#jQuery.fn.init [p.c2, prevObject: jQuery.fn.init(1)]

#选取后代中包含一个或多个指定标签的标签
$('div:has(a)');
#jQuery.fn.init(2) [div.c1, div.c6, prevObject: jQuery.fn.init(1)]
#找出所有满足not条件的标签
<label>篮球
    <input type="checkbox" checked name="hobby" id="i1">
</label>
<label >足球
    <input type="checkbox" name="hobby" id="i2">
</label>
$('label>input:not(:checked)');
#选出没有checked属性的input标签
#w.fn.init [input#i2, prevObject: w.fn.init(1)]

#示例代码
<p class="c1"></p>
<p class="c1"></p>
<p id="d1"></p>
<ul>
    <li id="d2"></li>
    <li id="d3">
        <a href=""></a>
    </li>
</ul>

#找到所有后代中不含a标签的li标签
$("li:not(:has(a))")
#Query.fn.init [li#d2, prevObject: jQuery.fn.init(1)]

#找到不含class=c1的p标签
$('p:not(.c1)');
#jQuery.fn.init [p#d1, prevObject: jQuery.fn.init(1)]

属性选择器

#示例代码
<p class="c1"></p>
<p class="c1"></p>
<p id="d1"></p>

#选取带有该属性的指定标签
$('p[class]');
#jQuery.fn.init(2) [p.c1, p.c1, prevObject: jQuery.fn.init(1)]


#选取该属性值等于指定值的标签
$('p[id="d1"]');
#Query.fn.init [p#d1, prevObject: jQuery.fn.init(1)]

##选取该属性值不等于指定值的标签
$('p[class!="c1"]');
#jQuery.fn.init(2) [p#d1, p.c2, prevObject: jQuery.fn.init(1)]

表单常用筛选方法

方法 说明
$(":text"); 找出type="text"(文本)的input标签
$(":password"); 找出type="password"(密码)的input标签
$(":file"); 找出type="file"(文件)的input标签
$(":radio"); 找出type="radio"(单选框)的input标签
$(":checkbox"); 找出type="checkbox"(多选框)的input标签
$(":submit"); 找出type="submit"的input标签
$(":reset"); 找出type="reset"的input标签
$(":button"); 找出type="button"的input标签

注意:$(":text")与$("input:text");结果相同

表单对象属性

方法 说明
$("input:enabled"); 找出属性为enabled(可用)的input标签
$("input:disabled"); 找出属性为disabled(不可用)的input标签
$("input:checked"); 找出属性为checked(显示默认选择)的input标签
$(":selected"); 找出属性为selected(显示默认选择)的option标签
#示例代码
<p>爱好</p>
<label>篮球
    <input type="checkbox" checked name="hobby" id="i1">
</label>
<label >足球
    <input type="checkbox" name="hobby" id="i2">
</label>
<label>双色球
    <input type="checkbox" name="hobby" id="i3">
</label>

<p>
    <label >出生地
        <select name="from">
            <option >黄浦区</option>
            <option >静安区</option>
            <option  selected>浦东新区</option>
        </select>
    </label>
</p>

#找到属性含有checked的input标签
$("input:checked");
#w.fn.init [input#i1, prevObject: w.fn.init(1)]

#找到含有属性checked的标签
$(":checked");
#w.fn.init(2) [input#i1, option, prevObject: w.fn.init(1)]
#找到input标签和option标签

#找到含有属性select的标签
$(":selected");
#w.fn.init [option, prevObject: w.fn.init(1)]
#只找到option标签

注意:checked查找会包含option中的含有selected属性的option标签,
而selected中查找select标签下的option标签。

筛选方法

同级别筛选

#选出某标签同级别的后面的一个标签
$("#d1").next()
#选出id=id的标签同级别后面的一个标签

#选出某标签同级别的后面的所有标签
$("#d1").nextAll()
#选出id=id的标签同级别后面的所有标签

#选出某标签同级别的后面的所有标签直至指定的标签为止
$("#d1").nextUntil("#i2")
#选出id=d1的标签的同级别的后面的标签直至id=i2的标签为止(不包含id=i2的标签)

#选出某标签同级别的前面的一个标签
$("#d1").prev()
#选出id=id的标签同级别前面的一个标签

#选出某标签同级别的前面的所有标签
$("#d1").prevtAll()
#选出id=id的标签同级别前面的所有标签

#选出某标签同级别的前面的所有标签直至指定的标签为止
$("#d1").prevtUntil("#i2")
#选出id=d1的标签的同级别的前面的标签直至id=i2的标签为止(不包含id=i2的标签)

层级筛选

#找出某元素的父级标签
$("#id").parent()

#找出当前元素的所有的父辈元素
$("#id").parents()

#找出当前元素的所有的父辈元素,直到遇到匹配的那个元素为止。
$("#id").parentsUntil()

#找到当前元素的所有的子集元素
$("#id").children();

#找到当前元素的所有的同级元素
$("#id").siblings();

其他筛选方法

以下相邻2行代码的功能相同
查找
#找出div标签中所有的后代p标签 $("div").find('p') $('div p') 筛选 #从结果中过滤出有class='c1'的标签 $("div").filter(".c1") $("div.c1") #获取匹配的第一个元素 $('div>p').first(); $('div>p:first'); #获取匹配的最后一个元素 $('div>p').last(); $('div>p:last'); #获取索引值匹配的元素 $('div>p').eq(); $('div>p:eq(2)'); #获取具有指定条件的元素 $('div').has(); $('div:has(a)'); #获取不含指定条件的元素 $('p').not(c1); $('p:not(.c1)');

操作标签

样式操作

对于类class的相关操作

#为当前标签添加指定的样式类
$('div').addClass('c1')

#移除当前标签的指定的css类
$('div').removeClass('c1')

#判断当前标签是否含有指定的类
$('div').hasClass('c1')

#切换当前标签的css类,有则移除,没有则添加
$('div').toggleClass('c1')

对于css属性的修改

方法:在要修改的标签后添加方法
#设置单个属性 css(
'属性','')
#设置多个属性
css({'属性':'值','属性':'值','属性':'值'}) 示例 $(
"p").css("color", "red"); #将所有p标签的字体设置为红色 #等同于DOM操作:tag.style.color='red'
#设置p标签的字体颜色和边框属性
$("p").css({"color":"red","border":"1px solid black"});

 标签位置相关

示例代码
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body{
            margin-top: 50px;
            margin-left: 50px;
        }
        .d1{
            height:50px;
             50px;
            background-color: cornflowerblue;
            position: relative;
        }
        .d2{
            height: 50px;
             50px;
            background-color: mediumpurple;
            position: absolute;
            top:100px;
            left:100px;
        }
    </style>
</head>
<body>
    <div class="d1">
        <div class="d2"></div>
    </div>

    <div class="d3">div3</div>
    <script src="jquery-3.3.1.js"></script>
</body>

#获取指定元素相对于窗口左上角的偏移位置
$(".d1").offset();
#返回{top: 50, left: 50}
$(".d2").offset();
#返回{top: 150, left: 150}

#设置指定元素相对于窗口左上角的偏移位置
$(".d3").offset({top:200,left:200});


#获取指定元素相对于父级元素的位置偏移量
$(".d2").position();
#返回{top: 100, left: 100}

#获取当前位置的滚动条距离页面顶端的距离
$(window).scrollTop();

#设置滚动条距离页面顶端的距离
$(window).scrollTop(1000);

标签尺寸相关

示例代码
<head>
    <meta charset="UTF-8">
    <title>尺寸相关</title>
    <style>
        .c1 {
            height: 100px;
             100px;
            padding: 15px;
            border: 5px solid red;
            margin: 20px;
        }
    </style>
</head>
<body>
<div class="c1"></div>
<script src="jquery-3.3.1.min.js"></script>
</body>
#获取指定标签的高c
$(".c1").height();
#返回100

#获取指定标签的宽
$(".c1").width();
#返回100

$(".c1").innerHeight();
#返回130
#得到内容+内填充(padding)的高

$(".c1").innerWidth();
#返回130
#得到内容+内填充(padding)的宽

$(".c1").outerWidth();
#返回140
#得到内容+内填充(padding)+边框(border)的宽

$(".c1").outerHeight();
#返回140
#得到内容+内填充(padding)+边框(border)的高

文本操作

HTML代码
#
获取符合指定条件的第一个元素的标签内的所有内容 $('.c1').html(); #返回"段落1" $('.c2').html(); #返回"<p class="c3">段落2</p>,<p class="c1"><a href="">a</a></p>" #设置或修改匹配到的所有的标签中的内容 $('.c1').html("<h1>111</h1>"); #含有class='c1'的标签内的内容都被修改。
文本内容 #获取符合指定条件的所有元素的标签内的内容 $('.c1').text(); #返回"段落1,div,a" ##设置或修改匹配到的所有的标签的内容 $('.c1').text("111"); #含有class='c1'的标签内的内容都被修改 #text()与html()的区别 $('#d1').text(); #返回"段落1" $('#d1').html(); #返回"<p class="c1">段落1</p>"

标签中值的相关操作

示例代码
用户名<input type="text" name="username" value="Chris" >
用户名<input type="text" name="username" value="Kris" >

#获取匹配条件的第一个标签的值
$('input[name="username"]').val();
#结果"Chris"

#设置或修改匹配条件的所有的标签的值
$('input[name="username"]').val('A');

<input type="checkbox" name="hobby" value="basketball">篮球
<input type="checkbox" name="hobby" value="football">足球
<input type="checkbox" name="hobby" value="doublecolorball">双色球
#获取选中的第一个标签的值
$('input[name="hobby"]:checked').val();
#若同时选中football,doublecolorball,则结果为"football"
$('input[name="hobby"]:checked')[1].value;
#结果为"doublecolorball",想获得选中的第二标签的值,则用上述方法。

#给多选框(checkbox,select)设置默认选项val([val1, val2])
$('input[name="hobby"]').val(["basketball","doublecolorball"]);
#给上述checkbox的选项框设置了"basketball"和"doublecolorball"这2个默认选项。

属性相关操作

示例代码
<div id="d1" class="c1">div1</div>
<div id="d2" class="c1">div2</div>
<div class="c1">div3</div>

#返回符合条件的第一个标签的指定的属性值attr(attrName)
$(".c1").attr("id");
#返回"d1"
#给符合条件的所有标签的设置一个属性值attr(attrName, attrValue)
$(".c1").attr("x","1");
#上述3个div都添加上x=1的属性

#给符合条件的所有标签的设置多个属性值attr({k1: v1, k2:v2})
$(".c1").attr({"y":"1""z":"1"});

#移除当前标签的指定属性
$("#d1").removeAttr("class");

checkbox和radio的属性操作

 文档相关处理

示例代码
<div id="d1">
    <div class="d2">div</div>
</div>
<div id="d2" class="c1">divdiv</div>

var pEle = document.createElement("p");
pEle.innerText='段落';

#添加到指定标签内容的后面
$('#d1').append(pEle);
$(pEle).appendTo($('#d1'));
#结果如下
<div id="d1">
    <div class="d2">div</div>
    <p>段落</p>
</div>

#添加到指定标签内容的前面
$('#d1').prepend(pEle);
$(pEle).prependTo($('#d1'));

#添加到指定标签的后面
$('#d2').after(pEle);
$(pEle).insertAfter($('#d2'));
#结果如下
<div id="d2" class="c1">divdiv</div>
<p>段落</p>

#添加到指定标签的前面
$('#d2').before(pEle);
$(pEle).insertBefore($('#d2'));

移除和清空元素

示例代码
<div id="d1" class="d">
    div1
    <p class="c1">段落1</p>
</div>
<div class="c1">div</div>
<div class="d">
    <p class="c3">段落2</p>
    <p class="c1">
        <a href="">a</a>
    </p>
</div>

#清除所有满足条件的标签
$('.c1').remove();
#带有class="c1"的标签全被移除

#清空符合条件的所有标签的子节点(标签中的内容)
$('.d').empty();
#含有class="d"的标签中的内容都被清空

替换

#示例代码
<div id="d1" class="d">
    div1
    <p class="c1">段落1</p>
</div>
<div class="c1">div</div>
<div class="d">
    <p class="c3">段落2</p>
    <p class="c1">
        <a href="">a</a>
    </p>
</div>

var pEle=document.createElement('p')
pEle.innerText='段落'
#将符合条件的所有标签替换成指定的标签
$('.c1').replaceWith(pEle);
$(pEle).replaceAll($('.c1'));

#含有class="c3"的标签全部替换成新建的p标签

克隆

var pEle=document.createElement('p')
pEle.innerText='段落'

复制得到相同的标签
$('p').clone()

 事件

# 目标标签被点击时触发
click(function(){...})
# 鼠标放在目标标签上时触发
hover(function(){...})
# input框失去焦点时触发
blur(function(){...})
# input框获取焦点时触发
focus(function(){...})
# input数据更改时触发
change(function(){...})
# 按键抬起时触发
keyup(function(){...})

hover事件示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body{
            margin: 0;
        }
        .top{
            height:40px;
            100%;
            background-color: slategrey;
        }
        ul{
            margin: 0;
            margin-left: 20px;
            padding:0;
            list-style-type: none;
        }
        a{
            text-decoration: none;
            line-height: 40px;
        }
        a:hover{
            color: white;
        }
        ul li{
            float: left;
            margin-right: 15px;
            padding: 0 10px;
        }
        ul li:hover{
            background-color: #111111;
        }
        .shop{
            position: relative;
        }
        .box{
            height: 80px;
             200px;
            background-color: bisque;
            position: absolute;
            top:40px;
            left:0;
            text-align: center;
            display: none;
        }
        .show{
            display: block;
        }
    </style>
</head>
<body>
<div class="top">
    <ul>
        <li><a href="">注册</a></li>
        <li><a href="">登录</a></li>
        <li class="shop">
            <a href="">购物车</a>
            <div class="box">空空如也</div>
        </li>
    </ul>
</div>

<script src="jquery-3.3.1.js"></script>
<script>
    $('.shop').hover(
        function () {
            $(this).find('.box').addClass('show');
        },
        function () {
            $(this).find('.box').removeClass('show')
        }
    )
</script>
# this是指触发该事件的元素
# 鼠标移动到该元素上时发生的事和移开时发生的事
</body>
</html>
View Code

事件绑定

1、给$('选择器')选择出来的对象绑定event事件
方法:1:
$("选择器").on("envent",function(){触发后执行的代码})

方法2:
$("选择器").envent(function(){触发后执行的代码})

$('选择器'):被绑定的对象
envent:要绑定的事件
function(){}:触发事件后要执行的匿名事件函数

2、委托事件绑定方法
$("选择器").on("envent","selector",function(){触发后执行的代码})
$('选择器'):被委托的对象
"selector":选择器,选择出要被绑定事件的对象
envent:要绑定的事件
function(){}:触发事件后要执行的匿名事件函数

移除事件

1、给$('选择器')选择出来的对象绑定event事件
$("选择器").off("envent",function(){触发后执行的代码})


2、委托事件解绑方法
$("选择器").off("envent","selector",function(){触发后执行的代码})
$('选择器'):被委托的对象
"selector":选择器,选择出要被绑定事件的对象
envent:要绑定的事件
function(){}:触发事件后要执行的匿名事件函数

事件绑定注意事项

DOM中定义的事件如:click,keydown等,一般使用on方法绑定事件,而jQuery中定义的事件如:hover等,一般不用on来绑定。

阻止后续事件执行

$("selector").event(function(){
触发事件后执行的代码
return false
})

在执行匿名函数的执行代码后添加return false,阻止后续事件的发生

页面载入

当浏览器读取HTML文档是会按照层级关系生成DOM树,从上到下读取文档时若遇到JQuery操作对象的命名在jQuery执行操作之后,则浏览器会报错。

报错文档

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>页面加载完执行</title>
</head>

<script>
 $(function () {
       var d1Ele = document.getElementById("d1");
       console.log(d1Ele);
       console.log(d1Ele.innerText);
   })
</script>

<body>
<div id="d1">div</div>
<script src="jquery-3.3.1.min.js"></script>
</body>
</html>
#该文档的jQuery操作中对象(d1Ele)的定义处于该操作之后,浏览器加载完文档后报错。

解决方法

#方法1:把jQuery相关操作放在body标签中内容的后面
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>页面加载完执行</title>
</head>
<body>

<div id="d1">div</div>

<script src="jquery-3.3.1.min.js"></script>
<script>
 $(function () {
       var d1Ele = document.getElementById("d1");
       console.log(d1Ele);
       console.log(d1Ele.innerText);
   })
</script>

</body>
</html>
#方法2;
$(document).ready(function(){
//js代码
})

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>页面加载完执行</title>
</head>
<body>

<script>
  $(document).ready(function () {
        var d1Ele = document.getElementById("d1");
        console.log(d1Ele);
        console.log(d1Ele.innerText);
    });
</script>

<div id="d1">div</div>
<script src="jquery-3.3.1.min.js"></script>

</body>
</html>

事件委托

事件委托原理:利用事件冒泡原理,通过父标签将事件绑定到子标签身上。

事件冒泡:事件从最深的节点开始,会逐层向上传播。例如div>ul>li>a,给a绑定一个点击事件,那么这个事件就会一层一层的往外执行,执行顺序a>li>ul>div。因此给最外面的div加点击事件,其后代标签ul,li,a做点击事件的时候,都会冒泡到最外层的div上,所以后代标签都会触发绑定的事件,这就是事件委托,委托它们父级代为执行事件。

动画效果

$("selector"):根据选择器selector选择出的对象
#盒子效果
$("selector").show(s)  # 逐渐显示
$("selector").hide(s)  # 逐渐消失
$("selector").toggle(s)  # 显示时隐藏,隐藏时显示
# 参数是变化时间,单位毫秒,不设置参数时,默认为0,即执行该命令立刻消失或显示


#竖向压缩效果,改变对象的高来实现
$("selector").slideDown(s)   # 从上向下显示
$("selector").slideUp(s)  # 从下向上压缩,逐渐消失
$("selector").slideToggle(s)

#淡入淡出效果,通过改变透明度来实现
$("selector").fadeIn(s)  # 逐渐变深
$("selector").fadeOut(s)  # 逐渐变淡
$("selector").fadeTo([[s],o])  # 参数o设置透明度变为多少
$("selector").fadeToggle(s)

each函数

each是一个迭代函数,可以用来依次取出数组或jQuery对象集中的每一个元素。

var list=[1,2,3];
$.each(list,function(i,v){console.log(i,v)});
#结果如下
0 1
1 2
2 3

$.each(list,function(i){console.log(i)});
#结果如下
0
1
2
示例代码
<div>div1</div>
<div>div2</div>

var $divEles=$("div");
$.each(divEles,function(i){
    console.log($divEles[i]);
})
#结果
        <div>div1</div>
        <div>div2</div>   

 $('div').each(function(){
    console.log(this)
})
#结果
        <div>div1</div>
        <div>div2</div>   
each方法迭代出jQuery对象中的每一个DOM元素,每次回调函数执行时,会传递当前循环次数(从0开始)作为索引取出对象中的DOM元素
this指向当前循环取出的元素。
var list=[1,2,3];
$.each(list,function(i){
    if (list[i]===2){
    return
    }
    console.log(list[i])
});
#结果1,3
#跳出本次循环
var list=[1,2,3];
$.each(list,function(i){
    if (list[i]===2){
    return false
    }
    console.log(list[i])
});
#结果1
#跳出each循环

data方法

示例代码
<div>div1</div>
<div>div2</div>
#给匹配的所有元素存储任意相关的数据 
.data(key,value)
$("div").data('x',1);
#给上述2个div标签都保存数据x=1

#通过存储时的key可以拿到对应的值
.data(key)
$("div").data('x');
#返回1
#返回匹配的元素集合中的第一个元素的指定key所对应的值
#返回第一个div保存的1

#移除存放于元素上的数据
$("div").removeData('x');
#移除上述2个div标签上存储的x=1

#不假参数,移除存放于匹配元素上的所有数据
$('selector').removeData();
原文地址:https://www.cnblogs.com/mingkong-z/p/9131866.html