前端 -- jQuery

11.4 Jquery

jQuery的优势

  • js代码对浏览器的兼容性更好

  • 隐式循环

  • 链式操作

jQuery是什么? -- 高度封装了js代码块的模块,封装了dom节点,封装了操作dom节点的简便方法

$: 就是jQuery的简写.

jQuery对象和DOM对象的互相转换

jQuery封装了DOM
DOM转换成jQuery : jQuery(DOM对象) / $(DOM对象)
jQuery转成DOM : jQuery对象[index]

</ jQuery对象转换成了 DOM 对象之后,可以直接调用 DOM 提供的一些功能

11.4.1 jQuery选择器

1. 基础选择器
代码解释
$("#id") id选择器
$("tagName") 标签选择器
$(".className") 类选择器
$("*") 通用选择器
$("div.className") 交集选择器(含有className的div标签
$("#id, .className, tagName") 并集选择器
2. 层级选择器
代码解释
$("div li") 后代选择器,div下面的所有li标签
$("div>ul>li") 子代选择器,div下面的ul标签里的所有里标签
$(".xxx+li") 毗邻选择器,有类名xxx标签的下一个li标签
$(".xxx~li") 弟弟选择器,有类名xxx标签的下面的所有li标签
3. 属性选择器
代码解释
$('[属性名]') 含有某属性的标签
$('xxx[属性名]') 含有某属性的xxx标签
$('选择器[属性名]') 符合选择器且含有某属性的标签
$('选择器[属性名='xxx']') 符合选择器且某属性值='xxx'的标签
$('选择器[属性名$='xxx']') 符合选择器且某属性值以xxx结尾的标签
$('选择器[属性名^='xxx']') 符合选择器且某属性值以xxx开头的标签
$('选择器[属性名*='xxx']') 符合选择器且某属性值包含xxx的标签
$('选择器[属性名1] [属性名2='xxx']') 符合选择器且拥有属性1和属性2,且属性2的值为xxx的标签

11.4.2 jQuery筛选器

1. 基础筛选器
代码解释
$('选择器:筛选器') 作用域选择器选择出来的结果
$('选择器:first') 找第一个的标签
$('选择器:last') 找最后一个的标签
$('选择器:eq(index)') 通过索引找的标签
$('选择器:even') 找偶数索引的标签
$('选择器:odd') 找奇数索引的标签
$('选择器:gt(index)') 找大于索引的标签
$('选择器:lt(index)') 找小于索引的标签
$('选择器:not(选择器)') 找没有某选择器的标签
$('选择器:has(标签)') 找含有xxx标签的的标签
2. 表单筛选器
type筛选器
代码解释
$(':text') 找type属性值为text的标签(文本框)
$(':password') 找type属性值为password的标签(密码框)
$(':radio') 找type属性值为radio的标签(单选框)
$(':checkbox') 找type属性值为checkbox的标签(多选框)
$(':file') 找type属性值为file的标签(文件选择框)
$(':submit') 找type属性值为submit的标签(提交按钮框)
$(':reset') 找type属性值为reset的标签(重置按钮框)
$(':button') 找type属性值为button的标签(普通按钮框)

<!-- date , type的input是找不到的 -->

状态筛选器
enabled  //可选择的
disabled //不可选择
checked  //默认选择
selected //默认选择
​
$(':disabled')
jQuery.fn.init [input, prevObject: jQuery.fn.init(1)]
$(':enabled')
jQuery.fn.init(15) [input, input, input, input, input, input, input, input, input, input, input, select, option, option, option, prevObject: jQuery.fn.init(1)]
$(':checked')
jQuery.fn.init(4) [input, input, input, option, prevObject: jQuery.fn.init(1)]
$(':selected')
$(':checkbox:checked')
jQuery.fn.init(2) [input, input, prevObject: jQuery.fn.init(1)]
$('input:checkbox:checked')
jQuery.fn.init(2) [input, input, prevObject: jQuery.fn.init(1)]

 

11.4.3 jQuery筛选器方法

代码解释
$('ul p').siblings() 找兄弟
$('ul p').prev() / next() / parent() 找上一个哥哥 / 弟弟 / 祖宗
$('ul p').prevAll() / nextAll() / parents() 找所有哥哥 / 弟弟 / 祖宗
$('ul p').prevUntil('选择器') / nextUntil('选择器') parentsUnitil('选择器') 找哥哥 / 弟弟 / 祖宗到某一个地方就停止
$('ul').children() 找儿子
// 筛选方法
first()
last()
eq(index)
not('选择器')   去掉满足选择器条件的
filter('选择器')交集选择器,在所有的结果中继续找满足选择器要求的
find('选择器')  后代选择器,找所有结果中符合选择器要求的后代
has('选择器')   通过后代关系找当代 

 

<!-- 注意:内容补充 -->

// 不要用for(i in li_list){}的方式循环一个jq对象,每个对象会封装方法
for(let i=0;i<li_list.length;i++){   //let 声明的变量的作用域只在for循环中
        console.log(i)
}

11.4.5 事件绑定

为button按钮绑定单击事件,单机按钮弹出警告框
$('button').click(
        function () {
            alert('别点我啊')
        }
)

11.4.6 标签的文本操作

$('li:first').text()       //获取第一个列表的文本内容
$('li:first').text('小白') //将第一个列表的文本值改为小白
​
$('li:last').html()       //获取最后一个列表的内容
$('li:last').html('大白') //将最后一个列表的内容改为xxx
​
$('li:first').html('<a href="https://www.baidu.com">百度一下</ a>') // 设置a标签属性
var a = document.createElement('a')
a.innerText = 'AD钙'
$('li:last').html(a)     // a 是dom对象
var a2 = document.createElement('a')
var jqobj = $(a2)
jqobj.text('旺仔')
$('li:last').html(jqobj)   // jqobj是jquery对象
</ html可以接受 标签,dom对象,jq对象

11.4.7 标签的操作

1. 增加
父子关系:
    (父).append(子)    //给父级的最后添加一个子
    (子).appendTo(父)  //将子添加到父级的最后
    (父).prepend(子)   //给父级的最前添加一个子
    (子).prependTo(父) //将子添加到父级的最前
​
兄弟关系:
    参考点.before(插入内容)       //在参考点之前插入内容
    $(插入内容).insertBefore(参考点) //将内容插入在参考点之前
    参考点.after(插入内容)        //在参考点之后插入内容
    $(插入内容).insertAfter(参考点)  //将内容插入在参考点之前
</ 如果被添加的标签原本就在文档树中,就相当于移动,参考点可以是标签,id,class等
2. 删除
remove / detach / empty
var obj = $('button').remove() //删除标签和事件,被删除的对象做返回值,将对象重新添加回去,有标签但没有事件
var obj = $('button').detach() //删除标签保留事件,被删掉的对象做返回值,将对象重新添加回去,有标签也有事件
$('ul').empty()                //清空ul里面的li标签,ul标签仍保留(清空内部内容,保留本身)
3. 修改
$('li').replaceWith(p)    //用p对象内容替换所有的li标签
$(p).replaceAll('li')     //将所有的li标签替换成p对象内容
4. 复制
var btn = $(this).clone()      //克隆标签但不能克隆事件
var btn = $(this).clone(true)  //克隆标签和事件
​
$('button').click(
        function () {
            var btn = $(this).clone(true);
            $(this).after(btn);
        }
    )

11.4.8 标签的属性操作

1. 通用属性
attr
获取属性的值
$('a').attr('href')
设置/修改属性的值
$('a').attr('href','http://www.baidu.com')
设置多个属性值
$('a').attr({'href':'http://www.baidu.com','title':'baidu'})
​
removeAttr
$('a').removeAttr('title') //删除title属性
# 如果一个标签只有true和false两种情况,适合用prop处理
​
$('input').prop('checked');       //查看是否有某属性,返回true或false
$('input').prop('checked',false); //取消全部选择
$('input').prop('checked',true);  //全部选择
2. 类的操作
添加类   addClass
$('div').addClass('red')           //添加一个类
$('div').addClass('red bigger')    //添加多个类
​
删除类   removeClass
$('div').removeClass('bigger')     //删除一个类
$('div').removeClass('red bigger') //删除多个类
​
转换类   toggleClass             //有就删除,没有就添加
$('div').toggleClass('red')      
$('div').toggleClass('red bigger')
3. 值的操作
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../jQuery3.4.1.js"></script>
</head>
<body>
<input type="text">
<input type="password">
<input type="radio" name="sex" value="1" checked><input type="radio" name="sex" value="2"><input type="checkbox" name="hobby" value="1" checked>足球
<input type="checkbox" name="hobby" value="2">音乐
<input type="checkbox" name="hobby" value="3">游戏
<input type="checkbox" name="hobby" value="4">电影
<select name="city" id="">
    <option value="1">北京</option>
    <option value="2">上海</option>
    <option value="3">天津</option>
    <option value="4">山东</option>
    <option value="5">河南</option>
</select>
</body>
<script>
    $(':text').val()             //查看值
    $(':text').val('123456');    //设置value值为xxx
    $(':password').val('456456');//设置value值为xxx
    $(':radio').val([2]);        //选择value值为2的选择
    $(':checkbox').val([1,3]);   //选择value值为1,3的选项
    $('select').val([5])         //选择value值为5的城市
</script>
</html>
​
# 对于选择框 : 单选,多选,下拉选择 -- 设置选中的值需要放在数组中.

11.4.9 css样式

$('div').css('background-color','red')           //设置一个样式
$('div').css({'height':'100px','width':'100px'}) //设置多个样式

11.4.10 滚动条

$(window).scrollLeft()  //水平滚动条距离左边的距离
$(window).scrollTop()   //垂直滚动条距离顶部的距离

11.4.11 盒子模型

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        div{
            background-color: tomato;
        }
    </style>
    <script src="../jQuery3.4.1.js"></script>
</head>
<body>
<div></div>
</body>
<script>
    // $('div').css({'width':'100px','height':'100px'})
    $('div').height(100);  //设置content高度
    $('div').height();     //查看content中content的高度
    $('div').width(100);   //设置content宽度
    $('div').width();      //查看content中content的宽度
    $('div').css('padding','20px'); //设置padding距离
    $('div').innerHeight(); //查看content+padding的高度
    $('div').innerWidth();  //查看content+padding的宽度
    $('div').css({'border':'5px','border-style':'solid'}); //设置border的宽度
    $('div').outerHeight(); //查看content+padding+border的高度
    $('div').outerWidth();  //查看content+padding+border的宽度
    $('div').css('margin','10px'); //设置margin的距离
    $('div').outerHeight(true); //查看content+padding+border+margin的高度
    $('div').outerWidth(true);  //查看content+padding+border+margin的宽度
    $('div').innerHeight(500)   //设置值,改变的是content的高度
</script>
</html>
​
# 设置值:变得永远是content的值

11.4.12 动画

slied滑动系列
sliedDown : 向下滑动显示
siledUp : 向上滑动隐藏
sliedToggle : down和up交替
# 动画时间用毫秒表示,也可以加回调函数
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .container{
            position: relative;
            float: right;
            height: 40px;
            width: 120px;
            background-color: lightblue;
        }
        .box{
            position: absolute;
            height: 100px;
            width: 300px;
            background-color: lightcoral;
            top: 40px;
            right: 0;
            display: none;
        }
        .car{
            position: absolute;
            width: 120px;
            line-height: 40px;
            text-align: center;
            top: 0;
            right: 0;
        }
    </style>
    <script src="../jQuery3.4.1.js"></script>
</head>
<body>
<div class="container">
    <div class="car">购物车(<span>0</span>)</div>
    <div class="box"></div>
</div>
</body>
<script>
    var block = false;
    $('.car').click(
        function () {
            // $('.box').slideToggle(500);
            if(block){
                $('.box').slideUp(500,fn2);  //fn1 , fn2 是回调函数
                block = false;
            }else {
                $('.box').slideDown(500,fn1);
                block = true;
            }
            function fn1() {                  
                $('.car').css('color','orange')
            }
            function fn2() {
                $('.car').css('color','black')
            }
        }
    )
</script>
</html>
​
show系列
show : 对角滑动显示
hide : 对角滑动隐藏
toggle : show和hide交替
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../jQuery3.4.1.js"></script>
    <style>
        div{
            height: 200px;
            width: 200px;
            background-color: lawngreen;
            display: block;
        }
    </style>
</head>
<body>
<button>显示</button>
<div></div>
</body>
<script>
    $('button').click(
        function () {
            $('div').stop();           //如果没有stop,连续点击,执行完当前动作,才会执行下一个动作
            // $('div').show(1000)     //显示
            // $('div').hide(1000)     //隐藏
            $('div').toggle(1000,fn)   //交替
        }
    )
    function fn() {
        if($('button').text()==='显示'){
            $('button').text('隐藏')
        }else {
            $('button').text('显示')
        }
    }
</script>
</html>

11.4.13 事件的绑定

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../jQuery3.4.1.js"></script>
</head>
<body>
    <button>点击</button>
</body>
<script>
    // 方式一
    $('button').click({'a':'b'},fn);  //可以不传参
    function fn(e){
        console.log(e.data);
        console.log(e.data.a);
        console.log('小白')
    }
    
    // 方式二
    $('button').bind('click',{'a':'b'},fn); //可以不传参
    function fn(e) {
        console.log(e);         //打印事件
        console.log(e.data);    //打印事件参数
        console.log(e.data.a);  //打印事件参数的值
        console.log('参数')
    }
    
    //解除绑定事件
    $('button').unbind('click',fn); 
</script>
</html>

11.4.14 各种事件

事件解释
click(function(){...}) 单击事件.点击触发
blur(function(){...}) 失去焦点
focus(function(){...}) 获得焦点
change(function(){...}) input框鼠标离开时,内容改变触发
keyup(function(){...}) 按下键盘触发事件, 获取字符编号: e.keyCode
hover(function(){...}) 鼠标悬浮触发
mouseover / mouseout 父元素绑定此事件,如果有子元素出入子元素也会触发
mouseenter / mouseleave 鼠标悬浮触发,鼠标进入 / 离开
1. 获得 / 失去焦点
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../jQuery3.4.1.js"></script>
</head>
<body>
<input type="text">
</body>
<script>
    $('input').focus(
        function () {
            console.log('获得焦点')
        }
    );
    $('input').blur(
        function () {
            console.log('失去焦点')
        }
    );
    $('input').change(
        function () {
            console.log('内容改变')
        }
    )
</script>
</html>
2. keyup
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../jQuery3.4.1.js"></script>
    <style>
        .mask{
            position: absolute;
            background-color: rgba(255,255,0,0.3);
            width: 100%;
            height: 100%;
            top: 0;
            left: 0;
        }
        .tk{
            position: absolute;
            width: 400px;
            height: 300px;
            background-color: lightblue;
            top: 50%;
            left: 50%;
            margin-left: -200px;
            margin-top: -150px;
        }
    </style>
</head>
<body>
<input type="text">
<h1>那女孩对我说,说我保护她的梦</h1>
<div class="mask">
    <div class="tk"></div>
</div>
</body>
<script>
    // $('input').keyup(
    //     function (e) {
    //         console.log(e.keyCode)  //keyCode:字符的ASCLL编号
    //     }
    // )
​
    $(window).keyup(
        function (e) {
            if(e.keyCode===27){
                $('.mask').css('display','none')
            }
        }
    )
</script>
</html>
3. mouseenter / leave
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .container{
            position: relative;
            float: right;
            height: 40px;
            width: 120px;
            background-color: lightblue;
        }
        .box{
            position: absolute;
            height: 100px;
            width: 300px;
            background-color: lightcoral;
            top: 40px;
            right: 0;
            display: none;
        }
        .car{
            position: absolute;
            width: 120px;
            line-height: 40px;
            text-align: center;
            top: 0;
            right: 0;
        }
    </style>
    <script src="../jQuery3.4.1.js"></script>
</head>
<body>
<div class="container">
    <div class="car">购物车(<span>0</span>)</div>
    <div class="box"></div>
</div>
</body>
<script>
    $('.container').mouseenter(    //鼠标悬浮触发
        function () {
            $('.box').stop();
            $('.box').slideDown(500);
        }
    );
    $('.container') .mouseleave(
        function () {
            $('.box').stop();
            $('.box').slideUp(500);
        }
    )
    $('.container').hover(            //鼠标悬浮触发,上面两个结合
        function(){
            $('.box').stop();
            $('.box').toggle(500);
        }
    )
</script>
</html>

 

4. mouseover / out
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../jQuery3.4.1.js"></script>
    <style>
        .out{
            width: 500px;
            height: 500px;
            background-color: lightpink;
        }
        .inner{
            position: absolute;
            width: 200px;
            height: 200px;
            left: 150px;
            top: 150px;
            background-color: purple;
        }
    </style>
</head>
<body>
<div class="out">
    <div class="inner"></div>
</div>
</body>
<script>
    $('.out').mouseover(   //进入父元素打印,进入子元素打印
        function () {
            console.log('enter')
        }
    );
​
    $('.out').mouseout(   //出来父元素打印,出来子元素打印
        function () {
            console.log('out')
        }
    )
</script>
</html>

 

11.4.15 事件冒泡

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .out{
            width: 500px;
            height: 500px;
            background-color: lightpink;
        }
        .inner{
            position: absolute;
            width: 200px;
            height: 200px;
            left: 150px;
            top: 150px;
            background-color: purple;
        }
    </style>
    <script src="../jQuery3.4.1.js"></script>
</head>
<body>
<div class="out">
    <div class="inner"></div>
</div>
</body>
<script>
    $('.out').click(
        function () {
            alert('out')
        }
    );
    $('.inner').click(    //点击子元素的同时,也相当于点击了父元素
        function (e) {
            alert('inner');
            return false  //阻止事件冒泡1
            // e.stopPropagation()  //阻止事件冒泡2
        }
    )
</script>
</html>

 

11.4.16 事件委托

# 后来添加的标签,可以拥有之前绑定的事件
​
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../jQuery3.4.1.js"></script>
</head>
<body>
<div>
    <button>点击1</button>
</div>
</body>
<script>
    $('div').on('click','button',function () {
        alert('点我干嘛')
    });
    var btn = document.createElement('button');
    $(btn).text('点击2').appendTo('div')
</script>
</html>

11.4.17 页面加载

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../jQuery3.4.1.js"></script>
    <script>
        window.onload = function(){     //window.onload要等到所有的文档 音视频都加在完毕才触发.
            $('button').click(          //window.onload 只能绑定一次.多次绑定,只有最后一次生效
                function () {
                    alert('点我干嘛')
                }
            )
        };
        window.onload = function(){
            alert('点我干嘛')
        };
​
        $(document).ready(              //jQuery的方式,只等待文档加载完毕之后就可以执行
            function () {               //在同一个html页面上可以多次使用
                $('button').click(
                    function () {
                        alert('别点我')
                    }
                )
            }
        );
        $(document).ready(
            function () {
                alert('别点了')
            }
        );
​
        //jQuery的简写方式
        $(function () {
            $('button').click(
                function () {
                    alert('就这样吧')
                })
        })
    </script>
</head>
<body>
    <button>点击</button>
</body>
<!--<script>-->
<!--    $('button').click(-->
<!--        function () {-->
<!--            alert('点我干嘛')-->
<!--        }-->
<!--    )-->
<!--</script>-->
</html>

11.4.18 each

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../jQuery3.4.1.js"></script>
</head>
<body>
    <ul>
        <li>那女孩对我说</li>
        <li>请先说你好</li>
        <li>明天,你好</li>
    </ul>
</body>
<script>
    $('li').each(
        function (index,val) {    //主动传index:每一项的索引,val:每一项的标签对象
            console.log(index,val)
        }
    )
</script>
</html>

 

posted on 2019-08-21 22:04  ShenQiang  阅读(183)  评论(0编辑  收藏  举报