Jquery

[亡魂溺海] 提交于 2019-12-01 16:21:45

1. 查找标签

1.1 基本选择器

// id选择器
var aEle = document.getElementById('a')   // js获取标签
aEle
// <div class=​"div" id=​"a">​…​</div>​

var $aEle=jQuery('#a');     // jq获取标签
// 等同于 var $aEle=$('#a');
$aEle
// k.fn.init [div#a.div]

var aELe = $aEle[0];   // jq对象变js对象
aELe
// <div class=​"div" id=​"a">​…​</div>​

var $a1Ele = $(aEle)   // js对象变jq对象
$a1Ele
// k.fn.init [div#a.div]


// 标签选择器
$('div');
// k.fn.init(2) [div#a.div, div.div1, prevObject: k.fn.init(1)]


// class选择器
$('.div1');
// k.fn.init [div.div1, prevObject: k.fn.init(1)]


// 配合使用
$('div span');   // 找到有span标签的div标签
// k.fn.init [span, prevObject: k.fn.init(1)]
$('div.div');   //找到有div class类的div标签
// k.fn.init [div#a.div, prevObject: k.fn.init(1)]


// 所有元素选择器
$('*');
// k.fn.init(20) [html, head, meta, title, script, body, div#a.div, span, div.div1, ul, li#1, span#span, li, li#3, li, li#5, input, input, select, option, prevObject: k.fn.init(1)]


// 组合选择器
$('#a,sapn');
// k.fn.init [div#a.div, prevObject: k.fn.init(1)]

1.2 层级选择器

// x的所有后代y(子子孙孙)
$('ul li');
// k.fn.init(5) [li#1, li, li#3, li, li#5, prevObject: k.fn.init(1)]

// x的所有儿子y(儿子)
$('ul>li');
// k.fn.init(5) [li#1, li, li#3, li, li#5, prevObject: k.fn.init(1)]

// 找到所有紧挨在x后面的y
$('#1+li');
// k.fn.init [li, prevObject: k.fn.init(1)]
$('#1+li')[0];
// <li>​2​</li>​

// x之后所有的兄弟y,同级后面的
$('#1~li');
// k.fn.init(4) [li, li#3, li, li#5, prevObject: k.fn.init(1)]

1.3 基本筛选器

// 第一个
$('ul li:first');
// k.fn.init [li#1, prevObject: k.fn.init(1)]

// 最后一个
$('ul li:last');
// k.fn.init [li#5, prevObject: k.fn.init(1)]

// 索引等于index的那个元素
$('ul li:eq(2)');
// k.fn.init [li#3, prevObject: k.fn.init(1)]

// 匹配所有索引值为偶数的元素,从 0 开始计数
$('ul li:even');
// k.fn.init(3) [li#1, li#3, li#5, prevObject: k.fn.init(1)]

// 匹配所有索引值为奇数的元素,从 0 开始计数
$('ul li:odd');
// k.fn.init(2) [li, li, prevObject: k.fn.init(1)]

// 匹配所有大于给定索引值的元素
$('ul li:gt(2)');
// k.fn.init(2) [li, li#5, prevObject: k.fn.init(1)]

// 匹配所有小于给定索引值的元素
$('ul li:lt(2)');
// k.fn.init(2) [li#1, li, prevObject: k.fn.init(1)]

// 移除所有满足not条件的标签
$('ul li:not(#1)');
// k.fn.init(4) [li, li#3, li, li#5, prevObject: k.fn.init(1)]

// 选取所有包含一个或多个标签在其内的标签(指的是从后代元素找)
$('ul li:has(span)');
// k.fn.init [li#1, prevObject: k.fn.init(1)]

1.4 属性选择器

$("input [type='checkbox']");   // 取到checkbox类型的input标签
// k.fn.init [prevObject: k.fn.init(1)]length: 0prevObject: k.fn.init [document]__proto__: Object(0)
$("input [type!='text']");   // 取到类型不是text的input标签
// k.fn.init [prevObject: k.fn.init(1)]

1.5 表单筛选器

// :text | :password | :file | :radio | :checkbox | :submit | :reset | :button

$(':checkbox');   // 找到所有的checkbox
// k.fn.init [input, prevObject: k.fn.init(1)]


// 表单对象属性
:enabled | :disabled | :checked | :selected

$('input:enabled');   // 找到可用的input标签
// k.fn.init(2) [input, input, prevObject: k.fn.init(1)]
$(':checked');
// k.fn.init(2) [input, option, prevObject: k.fn.init(1)]
$('input:checked');   // 坑点
// k.fn.init [input, prevObject: k.fn.init(1)]

2. 筛选器方法

// 下一个元素
$('#1').next();
// k.fn.init [li, prevObject: k.fn.init(1)]0: lilength: 1prevObject: k.fn.init [li#1]__proto__: Object(0)
// 下面的所有
$('#1').nextAll();
// k.fn.init(4) [li, li#3, li, li#5, prevObject: k.fn.init(1)]
// 下面的所有,到哪里为止
$('#1').nextUntil('#5');
// k.fn.init(3) [li, li#3, li, prevObject: k.fn.init(1)]


// 上一个元素
$('#5').prev();
// k.fn.init [li, prevObject: k.fn.init(1)]0: lilength: 1prevObject: k.fn.init [li#5]__proto__: Object(0)
$('#5').prevAll();
// k.fn.init(4) [li, li#3, li, li#1, prevObject: k.fn.init(1)]
$('#5').prevUntil('#1');
// k.fn.init(3) [li, li#3, li, prevObject: k.fn.init(1)]


// 父亲元素
$("#1").parent();
// k.fn.init [ul, prevObject: k.fn.init(1)]
$("#1").parents();   // 查找当前元素的所有的父辈元素
// k.fn.init(3) [ul, body, html, prevObject: k.fn.init(1)]
$("span").parentsUntil('html');   // 查找当前元素的所有的父辈元素,直到遇到匹配的那个元素为止
// k.fn.init(4) [li#1, ul, div#a.div, body, prevObject: k.fn.init(2)]


// 儿子和兄弟元素
$('ul').children();   // 儿子们
// k.fn.init(5) [li#1, li, li#3, li, li#5, prevObject: k.fn.init(1)]
$('ul').siblings();   // 兄弟们
// k.fn.init(5) [div#a.div, div.div1, input, input, select, prevObject: k.fn.init(1)]


// 查找:搜索所有与指定表达式匹配的元素,这个函数是找出正在处理的元素的后代元素的好方法
$('div').find('span');
// k.fn.init [span, prevObject: k.fn.init(2)]
$('div span');   // 等价
// k.fn.init [span, prevObject: k.fn.init(1)]
$('div').find('span')[0];
// <span>​我是span​</span>​
$('div span')[0];
// <span>​我是span​</span>​


// 筛选:筛选出与指定表达式匹配的元素集合  
$('ul').filter('#1');   // 从结果集中过滤出有1样式id的
// k.fn.init [prevObject: k.fn.init(1)]
$('ul#1');    // 等价
// k.fn.init [prevObject: k.fn.init(1)]


// 补充
.first()   // 获取匹配的第一个元素,等同于 :first
.last()   // 获取匹配的最后一个元素,等同于 :last
.not()   // 从匹配元素的集合中删除与指定表达式匹配的元素
.has()   // 保留包含特定后代的元素,去掉那些不含有指定后代的元素。
.eq(index)   // 索引值等于指定值的元素,等同于 :eq(index)

3. 操作标签

3.1 样式操作

// 添加类属性值
$('.div').addClass('div1');
// k.fn.init [div#a.div.div1, prevObject: k.fn.init(1)]

// 移除类属性值
$('.div').removeClass('div1');
// k.fn.init [div#a.div, prevObject: k.fn.init(1)]

// 判断样式存不存在
$('.div').hasClass('div');
// true
$('.div').hasClass('div1');
// false

// 切换CSS类名,有就移除,没有就添加
$('.div').toggleClass('div1');
// k.fn.init [div#a.div.div1, prevObject: k.fn.init(1)]0: div#a.div.div1length: 1prevObject: k.fn.init [document]__proto__: Object(0)
$('.div').toggleClass('div1');
// k.fn.init [div#a.div, prevObject: k.fn.init(1)]

// 添加css样式
$('span').css('color','red');   // 将所有span标签的字体设置为红色
// k.fn.init(2) [span, span#span, prevObject: k.fn.init(1)]
// 获取样式的值
$('span').css('color');
// "rgb(255, 0, 0)"
// 添加多个样式
$('span').css({'color':'green','font-size':36});
// k.fn.init(2) [span, span#span, prevObject: k.fn.init(1)]

3.2 位置操作

offset()// 获取匹配元素在当前窗口的相对偏移或设置元素位置
position()// 获取匹配元素相对父元素的偏移
scrollTop()// 获取匹配元素相对滚动条顶部的偏移
scrollLeft()// 获取匹配元素相对滚动条左侧的偏移

// .offset()方法允许我们检索一个元素相对于文档(document)的当前位置。和 .position()的差别在于: .position()是相对于相对于父级元素的位移。

3.3 尺寸

// 内容的宽高
$('div').height();
// 69
$('div').width();
// 1094

// 内容加padding的宽高
$('div').innerHeight();
// 89
$('div').innerWidth();
// 1124

// 内容加padding加border的宽高
$('div').outerWidth();
// 1126
$('div').outerHeight();
// 91

3.4 文本操作

// 获取value值
$('input').val();   // 获取第一个匹配元素的当前值
// "123"
$('input').val(789);   // 传参就是设置值
// k.fn.init [input, prevObject: k.fn.init(1)]


// HTML代码
$('div').html();   // 获取第一个匹配元素的html内容
/* "
    <h1>123</h1>
" */
$('div').html('<h2>456</h2>');   // 设置所有匹配元素的html内容
// k.fn.init [div.a1, prevObject: k.fn.init(1)]0: div.a1length: 1prevObject: k.fn.init [document]__proto__: Object(0)


// 文本值
$('div').text();   // 获取所有匹配元素的内容
/* "
    123
" */

$('div').text('<h2>456</h2>');   // 设置所有匹配元素的内容
// k.fn.init [div.a1, prevObject: k.fn.init(1)]

3.5 属性操作

// 用于ID等或自定义属性
$('div').attr('name','aa');   // 为所有匹配元素设置一个属性值
// k.fn.init [div.a1, prevObject: k.fn.init(1)]
$('div').attr('name');   // 返回第一个匹配元素的属性值
// "aa"
$('div').removeAttr('name');   // 从每一个匹配的元素中删除一个属性
// k.fn.init [div.a1, prevObject: k.fn.init(1)]
$('div').attr({'name':'aa','like':'eat'});   // 为所有匹配元素设置多个属性值
// k.fn.init [div.a1, prevObject: k.fn.init(1)]


// 用于checkbox和radio
$('input').prop('checked');   // 获取属性
// false
$('input').prop('checked',false);
// k.fn.init [input, prevObject: k.fn.init(1)]
$('input').attr('checked');   // 用attr可能会因为版本问题出现不兼容,所以在处理checkbox和radio的时候尽量使用特定的prop()
// undefined

removeProp()   // 移除属性


/*
attr全称attribute(属性) 
prop全称property(属性)
虽然都是属性,但他们所指的属性并不相同,attr所指的属性是HTML标签属性,而prop所指的是DOM对象属性,可以认为attr是显式的,而prop是隐式的。
对于标签上有的能看到的属性和自定义属性都用attr
对于返回布尔值的比如checkbox、radio和option的是否被选中都用prop。
*/

3.6 文档处理

var aELe = document.createElement('div');
aELe.innerText = 'asdf'
// "asdf"
aELe.setAttribute('id','rr');
aELe
// <div id=​"rr">​asdf​</div>​

// 添加到指定元素内部的后面
$('.a1').append(aELe);   // 把B追加到A
// k.fn.init [div.a1, prevObject: k.fn.init(1)]
$(A).appendTo(B);   // 把A追加到B


// 添加到指定元素内部的前面
$(A).prepend(B);   // 把B前置到A
$(A).prependTo(B);   // 把A前置到B


// 添加到指定元素外部的后面
$(A).after(B);   // 把B放到A的后面
$('#rr').insertAfter($('#ee'));   // 把A放到B的后面$(A).insertAfter(B)   // 把A放到B的后面
// k.fn.init [div#rr, prevObject: k.fn.init(1)]


// 添加到指定元素外部的前面
$(A).before(B);   // 把B放到A的前面
$(A).insertBefore(B);   // 把A放到B的前面


//移除和清空元素
remove();   // 从DOM中删除所有匹配的元素。
empty();   // 删除匹配的元素集合中所有的子节点


// 替换
replaceWith();
replaceAll();


// 克隆: clone方法不加参数true,表示克隆标签但不克隆标签带的事件,加参数true,克隆标签并且克隆标签带的事件
clone();

4. 事件

4.1 常用事件

click(function(){...})
hover(function(){...})
blur(function(){...})
focus(function(){...})
change(function(){...})
keyup(function(){...})

4.2 事件绑定

// .on()绑定的事件处理程序
.on( events [, selector ],function(){})

4.3 移除事件

// .off() 方法移除用
.off( events [, selector ][,function(){}])

4.4 阻止后续事件执行

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>阻止后续事件</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    <link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>
    <style>
        .hid{
            display: none;
        }
    </style>
</head>
<body>
<form>
    <input type="text" value="" id ="id"><span class="hid">不能为空</span>
    <br>
    <input type="submit" value="拜拜!" id="sub">
</form>
<script>
    $("#sub").on("click",function (e) {
           var data= $("#id").val();
           if(!data.trim()){
               $(".hid").removeClass("hid");
               //第一种阻止事件的方法
               // return false   // 常见阻止表单提交等
               //第二种阻止事件的方法
               e.preventDefault()
           }
    })
</script>
</body>
</html>

注意

像click、keydown等DOM中定义的事件,我们都可以使用.on()方法来绑定事件,但是hover这种jQuery中定义的事件就不能用.on()方法来绑定了。
使用事件委托的方式绑定hover事件处理函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    <link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>

</head>
<body>
<div style="width: 200px;height: 200px;background-color: red">来玩啊</div>

<script>
    $("div").hover(
        function () {
            alert("很开心为你服务");
        },
        function () {
            alert("大爷,慢走,下次再来")
        }
    )
</script>
</body>
</html>

4.5 阻止事件冒泡

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>阻止事件冒泡</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    <link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>
    <style>
        #a{
            width: 500px;
            height: 500px;
            background-color: red;
        }
         #b{
            width: 400px;
            height: 400px;
            background-color: green;
        }
        #c{
            width: 200px;
            height: 200px;
            background-color: black;
        }
    </style>
    <script>
        $(document).ready(function(){

            $("#a").on("click",function () {
                alert("第一")
            });
            $("#b").on("click",function (e) {
                alert("第er")
                   e.stopPropagation()
            });
            $("#c").on("click",function (e) {
                alert("第san");

            });

        })
        // 简写
        //  $(function(){
        //     $("#a").on("click",function () {
        //         alert("第一")
        //     });
        //     $("#b").on("click",function (e) {
        //         alert("第二")
        //            e.stopPropagation()
        //     });
        //     $("#c").on("click",function (e) {
        //         alert("第三");
        //     });
        // })
</script>
</head>
<body>
<div id="a">
    <div id="b">
        <div id="c"></div>
    </div>
</div>
</body>
</html>

4.6 页面载入

当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。这是事件模块中最重要的一个函数,因为它可以极大地提高web应用程序的响应速度

$(document).ready(function(){
// JS代码
})

// 简写:
$(function(){
// JS代码
})

4.7 事件委托

事件委托是通过事件冒泡的原理,利用父标签去捕获子标签的事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件委托</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    <link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>

</head>
<body>
<button>点我</button>
<script>
    $("body").on("click","button",function () {
        console.log(123)
    })

</script>
</body>
</html>

5. 动画效果

// 基本
show([s,[e],[fn]])
hide([s,[e],[fn]])
toggle([s],[e],[fn])
// 滑动
slideDown([s],[e],[fn])
slideUp([s,[e],[fn]])
slideToggle([s],[e],[fn])
// 淡入淡出
fadeIn([s],[e],[fn])
fadeOut([s],[e],[fn])
fadeTo([[s],o,[e],[fn]])
fadeToggle([s,[e],[fn]])
// 自定义(了解即可)
animate(p,[s],[e],[fn])
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!