zoukankan      html  css  js  c++  java
  • 前端之jQuery

    jQuery介绍

    jQuery是一个轻量级、兼容多浏览器的JavaScript库,能使用户更方便地处理HTML文档,实现动画效果、方便地进行Ajax交互。

    jQuery引入方式

    一种是引入本地的jQuery文件,另一种是引用jQuery的cdn

    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    

    jQuery基础语法

    $(选择器).action()
    

    查找标签

    基本选择器

    id选择器

    $('#id')
    

    标签选择器

    $('div')
    

    class选择器

    $('.c1')
    

    组合选择器

    $('#d1, .c1, p')
    

    所有元素选择器

    $('*')    // 选择所有的标签
    

    配合使用

    $("div.c1")  // 找到有c1 class类的div标签
    

    层级选择器

    $("div span")    // div 的所有span后代
    $("div > span")   // div的所有儿子span
    $("div + span")    // 毗邻 div紧挨着的span
    $("div ~ span")    // div同级下面的所有span
    

    基本筛选器

    :first // 第一个
    :last // 最后一个
    :eq(index)// 索引等于index的那个元素
    :even // 匹配所有索引值为偶数的元素,从 0 开始计数
    :odd // 匹配所有索引值为奇数的元素,从 0 开始计数
    :gt(index)// 匹配所有大于给定索引值的元素
    :lt(index)// 匹配所有小于给定索引值的元素
    :not(元素选择器)// 移除所有满足not条件的标签
    :has(元素选择器)// 选取所有包含一个或多个标签在其内的标签(指的是从后代元素找)
    

    例子:

    $('ul li:first')     //找到ul标签下第一个li标签
    
    $("div:has(h1)")     // 找到所有后代中有h1标签的div标签
    $("div:has(.c1)")     // 找到所有后代中有c1样式类的div标签
    
    $('div span:has("#d1")')    // 找到div所有后代中有的id为d1的span标签
    $('div span:not("#d1")')    // 找到div所有后代中有的id不为d1的span标签
    

    属性选择器

    $('[username]')
    $('[username = "cwz"]')
    $('p[username = "cwz"]')
    

    表单筛选器

    :仅仅在表单选择器上使用,默认是在input框,type属性

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

    补充知识点:

    <!--novalidate 取消前端给你做的校验功能-->
    <form action="" novalidate></form>
    

    特殊:

    $(":checkbox")  // 找到所有的checkbox
    

    筛选器方法

    下一个元素

    $("#id").next()
    $("#id").nextAll()    // 同级之下所有的
    $("#id").nextUntil("#i2")
    

    上一个元素

    $("#id").prev()
    $("#id").prevAll()
    $("#id").prevUntil("#i2")
    

    父亲元素

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

    儿子和兄弟元素:

    $("#id").children();// 儿子们
    $("#id").siblings();// 兄弟们
    
    .first() // 获取匹配的第一个元素
    .last() // 获取匹配的最后一个元素
    .not() // 从匹配元素的集合中删除与指定表达式匹配的元素
    .has() // 保留包含特定后代的元素,去掉那些不含有指定后代的元素。
    .eq() // 索引值等于指定值的元素
    
    
    $('div span:first')   // 等价操作:
    
    $('div span').first()
    

    filter筛选

    $("div").filter(".c1")  // 从结果集中过滤出有c1样式类的
    
    // 等价于 $("div.c1")
    

    操作标签

    样式操作

    addClass();     // 增加类
    removeClass();    // 移除指定的类
    hasClass();      // 判断样式是否存在
    toggleClass();    // 有则移除,没有就增加
    

    例子:开关灯实例

    修改css有样式

    <div>
        <p>11</p>
        <p>22</p>
    </div>
    

    需求:把11所在标签变为红色,22所在标签变为绿色

    $('div').children().first().css('color','red').next().css('color','green')
    

    位置操作

    offset()    // 获取匹配元素在当前窗口的相对偏移或设置元素位置
    position()   // 获取匹配元素相对父元素的偏移
    scrollTop()   // 获取匹配元素相对滚动条顶部的偏移
    scrollLeft()   // 获取匹配元素相对滚动条左侧的偏移
    
    $(window).scrollTop(0)   // 浏览器滚动条能快速回到顶部
    

    边框尺寸

    height()
    width()
    innerHeight()
    innerWidth()
    outerHeight()
    outerWidth()
    

    示例:

    $('p').innerHeight()
    60.8
    
    $('p').innerWidth()
    820
    

    文本操作

    $('div').text()    // 获取文本值
    $('div').html()    // 获取html代码
    
    $('div').text('有点意思')   // 设置文本值
    $('div').html('<h1>有点意思</h1>')    // 设置所有匹配元素的html内容,识别内容里的标签元素
    

    获取用户输入的值

    $('input').val()
    
    $('input').val('阿什顿')   // 不加参数,获取值;加了参数,设置值
    

    自定义登录校验示例:

    <!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>
    </head>
    <body>
    <h1>注册页面</h1>
    <form action="">
        <p>
            username:<input type="text" id="d1">
            <span style="color: red" class="errors"></span>
        </p>
        <p>
            password:<input type="password" id="d2">
            <span style="color: red" class="errors"></span>
        </p>
        <p>
            <input type="button" value="按钮" id="submit">
        </p>
    </form>
    <script>
        var btnEle = $('#submit')[0];
        btnEle.onclick = function () {
            // 获取用户输入的用户名 密码
            var userNameVal = $('#d1').val();
            var passWordVal = $('#d2').val();
            // 检验用户名和密码是否输入
            if (userNameVal.length === 0) {
                // 去对应的提示框中 展示错误信息
                $('.errors').first().text('用户名不能为空')
            }
             if (passWordVal.length === 0) {
                // 去对应的提示框中 展示错误信息
                $('.errors').last().text('密码不能为空')
            }
        };
    
        var inputEleList = $('input');
        for(let i=0;i<inputEleList.length;i++){
            inputEleList[i].onfocus = function () {
                $(this).next().text('')
            }
        }
    
    </script>
    </body>
    </html>
    

    属性操作

    attr(attrName)   // 返回第一个匹配元素的属性值
    attr(attrName, attrValue)   // 为所有匹配元素设置一个属性值
    attr({k1: v1, k2:v2})   // 为所有匹配元素设置多个属性值
    removeAttr()   // 从每一个匹配的元素中删除一个属性
    

    对于checked和radio:

    // attr()不能动态获取用户输入的内容,而prop()可以判断用户是否选中
    
    $('input').first().attr('checked', 'checked')   // 不能设置值
    $('input').first().prop('checked', 'checked')   // 可以设置值
    

    移除属性:

    // $('input').first().removeProp('checked') 已经没有效果了
    
    $('input').first().prop('checked', false)
    

    注意:在1.x及2.x版本的jQuery中使用attr对checkbox进行赋值操作时会出bug,在3.x版本的jQuery中则没有这个问题。为了兼容性,我们在处理checkbox和radio的时候尽量使用特定的prop(),不要使用attr("checked", "checked")。

    总结:

    1. 对于标签上有的能看到的属性和自定义属性都用attr
    2. 对于返回布尔值的比如checkbox、radio和option的是否被选中都用prop。
    3. 删除也是使用prop

    文档处理

    添加到元素内部的后面

    var pEle = document.createElement('p')
    $('body').append(pEle)
    $(pEle).appendTo('body')    // 两者效果一样
    

    添加到元素内部的前面

    $(A).prepend(B)     // 把B前置到A
    $(A).prependTo(B)    // 把A前置到B
    

    添加到指定元素外部的后面

    $(A).after(B)      // 把B放到A的后面
    $(A).insertAfter(B)    // 把A放到B的后面
    

    添加到指定元素外部的前面

    $(A).before(B)         // 把B放到A的前面
    $(A).insertBefore(B)   // 把A放到B的前面
    

    移除和清空元素

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

    克隆

    close()   //默认只克隆html和css,不克隆js   close(true) 克隆所有
    

    克隆示例

    <!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>
        <style>
            button {
                height: 100px;
                 150px;
                background-color: red;
                border: 3px solid darkgrey;
                color: white;
                font-size: 18px;
            }
        </style>
    </head>
    <body>
    <button>不经一番寒彻骨,怎得梅花扑鼻香。</button>
    </body>
    <script>
        // var btnEle = $('button')[0];
        // btnEle.onclick = function () {
        //     $(this).clone(true).insertAfter(this)
        // }
        // jQuery事件的绑定方式
        $('button').on('click', function(){
            $(this).clone(true).insertAfter(this)
        })
    </script>
    </html>
    

    事件

    常用事件

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

    jQuery事件绑定

    事件名(function(){
        // 事件代码
    })
    
    
    $(选择器).on('事件名',function(){
        // 事件名
    })   // 这种用途更广
    

    hover绑定事件

    <script>
        $('span').hover(
            function () {    // 鼠标悬浮上去的时候触发,如果只写了一个函数,那么悬浮和移开,只写同一个
                alert('欢迎光临~')
            },
            function () {
                alert('再见阿布~')
            }
        )
    </script>
    

    实时监测input内部输入内容

    <script>
        $('input').on('input',function () {
            // 获取用户输入内容
            console.log($(this).val())
        })
    </script>
    

    阻止后续事件执行

    两种方法:

    1. return false; // 常见阻止表单提交等
    2. e.preventDefault();
    <form action="">
        <input type="submit">
        <span></span>
    </form>
    <script>
        $('input').click(function (e) {
            $(this).next().text('有点意思~');
            // 阻止标签后续的事件
            // return false
    		// 方法2
            e.preventDefault()
        })
    </script>
    

    事件冒泡

    <!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>
    </head>
    <body>
    <div>div
        <p>p
            <span>span</span>
        </p>
    </div>
    </body>
    <script>
        $('div').click(function () {
            alert('div')
        });
        $('p').click(function () {
            alert('p')
        });
        $('span').click(function () {
            alert('span')
        })
    </script>
    </html>
    

    产生的效果:span标签在最里面,当点击span时,弹出框弹出三次。

    事件冒泡:一层一层往上触发

    阻止事件冒泡:e.stopPropagation()

    页面载入

    $(document).ready(function(){
    // 在这里写你的JS代码...
    })
    
    
    // 简写
    $(function(){
    // 你在这里写你的代码
    })
    
    

    你只要保证你的js代码写在body最下方即可

    事件委托

    如果想让你后续动态创建的标签也有事件,那么建议你使用事件委托。

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

    $('body').on('click','button',function () {
            alert(123)
    })
    

    动画效果

    $('.c1').hide(5000);    // 5000毫秒之内隐藏
    $('.c2').show(5000);     // 5000毫秒之内显示
    $('.c2').toggle(5000);   // 有内容就消失,没内容就显示
    
    $('.c1').slideUp(5000);   // 向上卷起
    $('.c1').slideDown(5000)   // 向下出来
    
    $('.c1').fadeOut(5000);    // 渐渐消失
    $('.c1').fadeIn(5000);     // 渐渐显示
    
    $('.c1').fadeTo(5000, 0.4)   // 0.4是透明度
    
    
    // 自定义(了解即可)
    animate(p,[s],[e],[fn])
    

    自定义动画示例:

    <!--点赞示例-->
    <!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>
      <style>
        div {
          position: relative;
          display: inline-block;
        }
        div>i {
          display: inline-block;
          color: red;
          position: absolute;
          right: -16px;
          top: -5px;
          opacity: 1;
        }
      </style>
    </head>
    <body>
    
    <div id="d1">点赞</div>
    <script>
      $("#d1").on("click", function () {
        var newI = document.createElement("i");
        newI.innerText = "+1";
        $(this).append(newI);
        $(this).children("i").animate({
          opacity: 0
        }, 1000)
      })
    </script>
    </body>
    </html>
    

    each

    前端for循环

    li =[1,2,3,4,5]
    $.each(li,function(index, obj){
      console.log(index, obj);   //index是索引,ele是每次循环的具体元素。
    })
    
    
    // 输出
    0 1
    1 2
    2 3
    3 4
    4 5
    

    .each(function(index, Element)):

    描述:遍历一个jQuery对象,为每个匹配元素执行一个函数。

    .each() 方法用来迭代jQuery对象中的每一个DOM元素。每次回调函数执行时,会传递当前循环次数作为参数(从0开始计数)。由于回调函数是在当前DOM元素为上下文的语境中触发的,所以关键字 this 总是指向这个元素。

    注意:

    在遍历过程中可以使用 return false提前结束each循环。

    .data()

    .data(key, value):

    描述:在匹配的元素上存储任意相关数据。

    $("div").data("k",100);//给所有div标签都保存一个名为k,值为100
    

    .data(key):

    描述: 返回匹配的元素集合中的第一个元素的给定名称的数据存储的值—通过 .data(name, value)HTML5 data-*属性设置。

    $("div").data("k");//返回第一个div标签中保存的"k"的值
    

    .removeData(key):

    描述:移除存放在元素上的数据,不加key参数表示移除所有保存的数据。

    $("div").removeData("k");  //移除元素上存放k对应的数据
    

  • 相关阅读:
    Spring Security配置logout地址
    flex布局
    视口的学习笔记
    box-sizing属性
    css清除浮动
    line-height的理解
    position和float小结
    css居中方法小结
    margin重叠
    浅谈负margin
  • 原文地址:https://www.cnblogs.com/setcreed/p/11893227.html
Copyright © 2011-2022 走看看