• 前端之jQuery


    1. jQuery概述

    • jQuery是一个javascript库,在它内部把几乎所有功能都做了封装
    • 在使用jQuery时,需要提前下载并应用jQuery之后,才能在代码中使用

    1.1 jQuery的引入

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset='utf-8'/>
        <title>jQuery</title>
    </head>
    <body>
        <div class="body">
            <ul>
                <li id="login">登录</li>
                <li id="register">注册</li>
            </ul>
        </div>
        <!--引入jQuery-->
        <script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
        <script>
            // 利用jQuery提供的功能获取标签文本
            var value = $('#login').text();
            console.log(value);
        </script>
    </body>
    </html>

    1.2 DOM对象和jQuery对象

    • DOM对象和jQuery之间可以进行相互转换
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset='utf-8'/>
        <title>jQuery</title>
    </head>
    <body>
        <div id="content">hgzero</div>
        <!--引入jQuery-->
        <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
        <script>
            // DOM操作
            // 获取文本
            var txt = document.getElementById('content').innerText;
            document.getElementById('content').innerText = '煞笔';
            // jQuery操作
            var text = $('#content').text();
            $('#content').text('傻狗');
            // Dom对象转换jQuery对象:$(dom对象)
            $(document.getElementById('content'))
            // jQuery对象转换成Dom对象:jQuery对象[0]
            $('#content')[0]
        </script>
    </body>
    </html>

    2. 选择器

    2.1 常用的选择器

    $(document)            // 选择整个文档对象
    $('li')                // 选择所有的li元素
    $('#myId')             // 选择id为myId的网页元素
    $('.myClass')          // 选择class为myClass的元素
    $('input[name=first]') // 选择name属性等于first的input元素
    $('#ul1 li span')      // 选择id为为ul1元素下的所有li下的span元素

    2.2 表单选择器

    1)html代码

    <form>
        <input type="button" value="Input Button"/>
        <input type="checkbox" />
        <input type="file" />
        <input type="hidden" />
        <input type="image" />
        <input type="password" />
        <input type="radio" />
        <input type="reset" />
        <input type="submit" />
        <input type="text" />
        <select>
            <option>Option</option>
        </select>
        <textarea> </textarea>
        <button>Button</button>
    </form>

    2)jQuery代码

    $(":text")          // 找到所有input标签
    // $(":input")      找到所有input标签
    // $(":password")   找到所有input且type=password的标签
    // $(":radio")      找到所有input且type=radio的标签
    // $(":checkbox")   找到所有input且type=checkbox的标签

    3. 筛选器

    • 筛选器一般用于对选择器选中的标签进行再次筛选

    3.1 对选择集进行修饰过滤

    • 类似CSS伪类
    $('#ul1 li:first')  // 选择id为ul1元素下的第一个li
    $('#ul1 li:odd')    // 选择id为ul1元素下的li的奇数行
    $('#ul1 li:eq(2)')  // 选择id为ul1元素下的第3个li
    $('#ul1 li:gt(2)')  // 选择id为ul1元素下的前三个之后的li
    $('#myForm :input') // 选择表单中的input元素
    $('div:visible')    // 选择可见的div元素

    3.2 对选择集进行函数过滤

    $('div').has('p');           // 选择包含p元素的div元素
    $('div').not('.myClass');    // 选择class不等于myClass的div元素
    $('div').filter('.myClass'); // 选择class等于myClass的div元素
    $('div').first();            // 选择第1个div元素
    $('div').eq(5);              // 选择第6个div元素

    3.3 选择集转移

    $('div').prev('p');        // 选择div元素前面的第一个p元素
    $('div').next('p');        // 选择div元素后面的第一个p元素
    $('div').closest('form');  // 选择离div最近的那个form父元素
    $('div').parent();         // 选择div的父元素
    $('div').children();       // 选择div的所有子元素
    $('div').siblings();       // 选择div的同级元素
    $('div').find('.myClass'); // 选择div内的class等于myClass的元素

    4. 样式操作

    4.1 操作行间样式

    • 选择器获取的多个元素,获取信息获取的是第一个,比如:$("div").css("width"),获取的是第一个div的width
    // 获取div的样式
    $("div").css("width");
    $("div").css("color");
    
    
    //设置div的样式
    $("div").css("width","30px");
    $("div").css("height","30px");
    // 一次操作多个css样式
    $("div").css({fontSize:"30px",color:"red"});

    4.2 操作样式类名

    $("#div1").addClass("divClass2")             // 为id为div1的对象追加样式divClass2
    $("#div1").removeClass("divClass")           // 移除id为div1的对象的class名为divClass的样式
    $("#div1").removeClass("divClass divClass2") // 移除多个样式
    $("#div1").toggleClass("anotherClass")       // 重复切换anotherClass样式

    5. 属性操作

    5.1 html() 和 text()

    1)html() 取出或设置html内容

    // 取出html内容
    var $htm = $('#div1').html();
    
    // 设置html内容
    $('#div1').html('<span>添加文字</span>');

    2)text() 取出或设置text内容

    // 取出文本内容
    var $htm = $('#div1').text();
    
    // 设置文本内容
    $('#div1').text('<span>添加文字</span>');

    5.2 attr() 

    • attr() 取出或设置某个属性的值
    // 取出图片的地址
    var $src = $('#img1').attr('src');
    
    // 设置图片的地址和alt属性
    $('#img1').attr({ src: "test.jpg", alt: "Test Image" });

    5.3 val() 值

    1)html代码

    <input type="text" id="username">
    <input type="text" class="a1" name="sex"><input type="text" class="a1" name="sex"><input type="text" class="a2" name="hobby">抽烟
    <input type="text" class="a2" name="hobby">喝酒
    <input type="text" class="a2" name="hobby">烫头
    <select name="city" id="s1">
        <option value="1">北京</option>
        <option value="2">上海</option>
        <option value="3">深圳</option>
    </select>
    <select name="lover" id="s2">
        <option value="1">波多</option>
        <option value="2">苍井</option>
        <option value="3">小泽</option>
    </select>

    2)获取值

    // 文本输入框:
        $('#username').val();
    // 单选radio框:
        $('.a1:checked').val();
    // 多选checkout框:
        $('.a2:checked').val()是不行的, 需要循环取值,如下:
            var d = $(':checkbox:checked');
                for (var i=0;i<d.length;i++){
                    console.log(d.eq(i).val());
                }
    // 单选select框:
        $('#city').val();
    // 多选select框:
        $('#lover').val();

    3)设置值

    // 文本输入框:
        $('#username').val('you are my love');
    // 单选radio框:
        $('.a1').val([2]);  // 注意里面必须是列表,写的是value属性对应的值
    // 多选checkout框:
        $('.a2').val(['2','3'])
    // 单选select框:
        $('#city').val('1');
    // 多选select框:
        $('#lover').val(['2','3'])

    5.4 prop() 属性

    // HTML代码:
    <input type="checkbox" id="i1" value="1">
    
    // jQuery代码:
    $("#i1").prop("checked")
    
    // 结果:
    false

    6. jQuery元素节点操作

    6.1 创建节点

    var $div = $('<div>');
    var $div2 = $('<div>这是一个div元素</div>');

    6.2 插入节点

    • append() 和 appendTo():在现存元素的内部,从后面插入元素
      var $span = $('<span>这是一个span元素</span>');
      $('#div1').append($span);
      ......
      <div id="div1"></div>
    • prepend() 和 prependTo():在现存元素的内部,从前面插入元素
    • after() 和 insertAfter():在现存元素的外部,从后面插入元素
    • before() 和 insertBefore():在现存元素的外部,从前面插入元素

    6.3 删除节点

    1)empty 删除标签内部的标签

    // HTML代码:
    <div class="d1">
        <span>波多</span>
    </div>
    
    // jQuery代码:
    $('.c1').empty()
    
    // 结果:
    <div class="d1">
    </div>

    2)remove 删除标签

    // HTML代码:
    <div class="d1">
        <span>波多</span>
    </div>
    <div>你好</div>
    
    // jQuery代码:
    $('.c1').remove()
    
    // 结果:
    <div>你好</div>

    7. 事件

    7.1 click事件

    • jQuery的链式调用:jquery对象的方法会在执行完后返回这个jquery对象,所有jquery对象的方法可以连起来写
    $('#btn1').click(function(){
        // 内部的this指的是原生对象
        // 使用jquery对象用 $(this)
    })

    7.2 jQuery特殊效果

    • hide() 隐藏元素
    • show() 显示元素
    • fadeIn() 淡入
    • fadeOut() 淡出
    • fadeToggle() 切换淡入淡出
    • toggle() 依次展示或隐藏某个元素
    • slideDown() 向下展开
    • slideUp() 向上卷起
    • slideToggle() 依次展开或卷起某个元素
    $btn.click(function(){
            $('#div1').fadeIn(1000,'swing',function(){
                alert('done!');
            });
        });

    7.3 jQuery动画

    • 通过animate方法可以设置元素某属性值上的动画,可以设置一个或多个属性值,动画执行完成后会执行一个函数
    $('#div1').animate({
        300,
        height:300
    },1000,swing,function(){
        alert('done!');
    });
    
    // 参数可以写成数字表达式:
    $('#div1').animate({
        '+=100',
        height:300
    },1000,swing,function(){
        alert('done!');
    });

    7.4 尺寸相关、滚动事件

    1)获取和设置元素的尺寸

    width()、height()                     # 获取元素width和height  
    innerWidth()、innerHeight()           # 包括padding的width和height  
    outerWidth()、outerHeight()           # 包括padding和border的width和height  
    outerWidth(true)、outerHeight(true)   # 包括padding和border以及margin的width和height

    2)获取元素相对页面的绝对位置

    offse()

    3)获取可视区高度

    $(window).height();

    4)获取页面高度

    $(document).height();

    5)获取页面滚动距离

    $(document).scrollTop();  
    $(document).scrollLeft();

    6)页面滚动时事件

    $(window).scroll(function(){  
        ......  
    })

    7.5 绑定事件

    1)绑定事件&取消绑定事件

    • 绑定事件的其他方式
    $(function(){
        $('#div1').bind('mouseover click', function(event) {
            alert($(this).html());
        });
    });
    • 取消绑定事件
    $(function(){
        $('#div1').bind('mouseover click', function(event) {
            alert($(this).html());
    
            // $(this).unbind();
            $(this).unbind('mouseover');
    
        });
    });

    2)主动触发与自定义事件

    • 主动触发
      • 可以使用jQuery对象上的trigger方法来触发对象上绑定的事件
    • 自定义事件
      • 除了系统事件外,可以通过bind方法自定义事件,然后用trigger方法触发这些事件
    //给element绑定hello事件
    element.bind("hello",function(){
        alert("hello world!");
    });
    
    //触发hello事件
    element.trigger("hello");

    7.6 事件冒泡

    1)什么是事件冒泡

    在一个对象上触发某类事件(比如单机onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序;

    如果没有定义此事件处理程序或者事件返回true,那么这个事件就会向这个对象的父级对象传播,从里岛外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层次的最顶层,即document对象(有些浏览器是window)

    2)事件冒泡的作用

    事件冒泡允许多个操作被集中处理(把事件处理器添加到一个父级元素上,避免把事件处理器添加到多个子级元素上),它还可以让你在对象层的不同级别捕获事件。

    3)阻止事件冒泡

    • 事件冒泡机制有时候是不需要的,需要阻止掉,通过event.stopPropagation()来阻止
    $(function(){
        var $box1 = $('.father');
        var $box2 = $('.son');
        var $box3 = $('.grandson');
        $box1.click(function() {
            alert('father');
        });
        $box2.click(function() {
            alert('son');
        });
        $box3.click(function(event) {
            alert('grandson');
            event.stopPropagation();
    
        });
        $(document).click(function(event) {
            alert('grandfather');
        });
    })
    ......
    <div class="father">
        <div class="son">
            <div class="grandson"></div>
        </div>
    </div>

    4)阻止默认行为

    // 阻止右键菜单
    $(document).contextmenu(function(event) {
        event.preventDefault();
    });

    5)合并阻止操作

    一般把阻止冒泡和组织默认行为合并起来写,合并写法可以用

    // event.stopPropagation();
    // event.preventDefault();
    
    // 合并写法:
    return false;

    7.7 事件委托

    1)什么是事件委托

    事件委托就是利用冒泡的原理,把事件加到父级上,通过判断事件来源的子集,执行相应的操作。

    事件委托首先可以极大的减少事件绑定次数,提高性能;其次可以让新加入的子元素也可以拥有相同的操作。

    2)一般绑定事件的写法

    $(function(){
        $ali = $('#list li');
        $ali.click(function(event) {
            $(this).css({background:'red'});
        });
    })
    ...
    <ul id="list">
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
    </ul>

    3)事件委托的写法

    $(function(){
        $list = $('#list');
        $list.delegate('li', 'click', function(event) {
            $(this).css({background:'red'});
        });
    })
    ...
    <ul id="list">
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
    </ul>

    4)取消事件委托

    // ev.delegateTarge 委托对象
    $(ev.delegateTarge).undelegate();
    
    // 上面的例子可使用 $list.undelegate();

    7.8 滚轮事件&函数节流

    1)jquery.mousewhell插件

    jquery中没有鼠标滚轮事件,原生js中的鼠标滚轮事件不兼容,可以使用jquery的滚轮事件插件jquery.mousewheel.js

    2)函数节流

    JavaScript中有些事件的触发频率非常高,比如onresize事件(jq中是resize),onmousemove事件(jq中是mousemove)以及上面说的鼠标滚轮事件,在短事件内多处触发执行绑定的函数,可以巧妙地使用定时器来减少触发的次数,实现函数节流。

  • 相关阅读:
    windows配置solr5.5.2(不通过tomcat,使用内置jetty)
    6月8日云栖精选夜读:mac下eclipse配置tomcat无法启动问题
    零配置部署 React
    万亿级数据洪峰下的分布式消息引擎
    ENode 2.0
    WannaCry感染文件恢复方法_企业再也不用愁了!
    中国最强的人工智能学术会议来了
    1篇文章看懂峰值带宽、流量、转码、连麦、截图五大直播计费方式
    CSS基础(三)
    CSS基础(三)
  • 原文地址:https://www.cnblogs.com/hgzero/p/13283649.html
Copyright © 2020-2023  润新知