• jQuery的基础·知识


    1、认识jQuery

    1、什么是jQuery

    jQuery是一个优秀的JavaScript库,是一个由John Resig创建于2006年1月的开源项目。jQuery凭借简洁的语法和跨平台的兼容性,极大地简化了JavaScript开发人员遍历HTML文档、操作DOM、处理事件、执行动画和开发ajax的操作。

    2、下载

    1、去官方网站下载:http://jquery.com/

    2、去CDN下载:https://www.bootcdn.cn/jquery/

    3、语法手册:https://jquery.cuishifeng.cn/

    3、版本介绍

    jQuery库分为1.x的版本和2.x、3.x的版本,1.x的版本兼容IE678,而2.x、3.x的版本不兼容IE678。

    4、jQuery库类型说明

    开发版:完整无压缩版本,主要用于测试、学习和开发

    生产版:经过工具压缩或经过服务器开启Gzip压缩,主要应用于产品和项目

    5、引入

    <!-- 引入本地文件 -->
    <script src="js/jquery.js"></script>
    <!-- 引入线上cdn文件 -->
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.9.1/jquery.js"></script>

    6、jQuery与$的关系

    它们是同一个东西,是等价的

    console.log($);
    console.log(jQuery);
    console.log($ === jQuery); // true

    7、页面加载

    // 页面加载完成
    window.onload = function () {
        alert('加载完成了');
    }
    ​
    // jq
    // $(document).ready(function () {
    //     alert('jq加载完成了');
    // });
    // 简写
    $(function () { });

    1、执行时机不同,window.onload必须等待网页中所有的内容加载完毕后(包括图片)才能执行,而$(document).ready()是网页中所有DOM结构绘制完毕就执行,可能DOM元素关联的东西并没有加载完。

    2、window.onload只能写一个,多个时后面的会覆盖掉前面的,而$(document).ready()可以写多个,不会覆盖。

    3、window.onload没有简写形式,而$(document).ready()可以简写成$(function (){})。

    8、相互转换

    <ul>
        <li>吃饭</li>
        <li>睡觉</li>
        <li>打豆豆</li>
    </ul>
    // jq 转 原生
    var $li = $('li'); // 通过jq获取了li元素 (如果你想使用原生的方法,就要转成原生的元素)
    // 1、jq对象[下标]   这个方法,不是jq给我们提供的,而是我们观察jq对象发现的
    console.log($li[0]);
    ​
    // 2、jq对象.get(下标);   
    // 如果没有参数,返回的是一个数组。如果有参数,返回这个参数对应的元素
    console.log($li.get());
    console.log($li.get(0));
    ​
    // -----------------------------
    // 原生 转 jQuery:  $(原生)
    var li = document.getElementsByTagName('li');
    console.log($(li));

    9、与别的库冲突

    var $ = 5;
    ​
    jQuery.noConflict(); // 将$的控制权让渡出来
    (function ($) {
        // 在这个里面,可以继续使用$
        console.log($); // 函数
    })(jQuery);
    ​
    console.log($); // 5

    2、jQuery选择器

    1、基本选择器

    基本选择器是jQuery中最常用的选择器,也是最简单的选择器,它通过元素id、class和标签名等来查找DOM元素。可以使用这些选择器来完成绝大多数的工作。

    $('#box').css('background', 'red');
    $('.abc').css('background', 'green');
    $('ul').css('background', 'blue'); // 这里没有循环,但是jq原码帮我们循环
    $('#box, .abc, ul').css('font-size', '50px');

    2、层次选择器

    如果想通过DOM元素之间的层次关系来获取特定元素,例如后代元素、子元素、相邻元素和同辈元素等,那么层次选择器是一个非常好的选择。

    $('ul li').css('border-bottom', '2px solid #ccc'); // 子孙
    $('ul').find('li').css('border-bottom', '2px solid #ccc');
    ​
    $('ul>li').css('border-bottom', '2px solid #ccc'); // 孩子
    $('ul').children().css('border-bottom', '2px solid #ccc');
    ​
    $('#ab+li').css('background', 'red'); // 下一个兄弟元素
    $('#ab').next().css('background', 'red');
    ​
    $('#ab~li').css('background', 'red'); // 下面所有的兄弟元素
    $('#ab').nextAll().css('background', 'red');

    3、过滤选择器

    过滤选择器主要是通过特定的过滤规则来筛选出所需的DOM元素,过滤规则与CSS中的伪类选择器语法相同,即选择器都以一个冒号开头。

    1、基本过滤选择器

    $('li:first').css('background', 'red'); // 第一个
    $('li').first().css('background', 'red');
    
    $('li:last').css('background', 'red'); // 最后一个
    $('li').last().css('background', 'red');
    
    $('li:even').css('background', 'red'); // 下标为偶数的
    $('li:odd').css('background', 'yellow'); // 下标为奇数的
    
    $('li:not(.box)').css('background', 'yellow'); // 排除
    $('li').not('.box').css('background', 'yellow');
    
    $('li:eq(1)').css('background', 'yellow'); // 下标为1的元素
    $('li').eq(1).css('background', 'yellow');
    
    $('li:gt(2)').css('background', 'yellow'); // 下标比2大的元素
    $('li:lt(2)').css('background', 'red'); // 下标比2小的元素
    
    $('li:lt(5):gt(2)').css('background', 'red'); // 比5小,比2大的区间

    2、属性过滤选择器

    属性过滤选择器的过滤规则是通过元素的属性来获取相应的元素。

    $('li[title]').css('background', 'red'); // 有title属性
    $('li[title=abc]').css('background', 'red'); // title是abc
    $('li[title!=abc]').css('background', 'red'); // title不是abc的
    
    $('li[title^=a]').css('background', 'red'); // title以a开头
    $('li[title$=业]').css('background', 'red'); // title以业结束
    $('li[title*=业]').css('background', 'red'); // title包含业

    4、表单选择器

    <form action="">
        <input type="text">
        <input type="password" name="">
        <input type="radio" name="" checked>
        <input type="checkbox" name="" checked>
        <input type="submit" value="提交">
        <input type="reset" value="重置">
        <input type="button" value="普通按钮">
        <input type="file" name="">
        <button>按钮</button>
    
        <textarea name="" id="" cols="30" rows="10"></textarea>
        <select name="" id="">
            <option value=""></option>
            <option value="" selected></option>
        </select>
    </form>
    console.log($(':input')); // 选取所有input textarea select button元素
    console.log($(':checked')); // 所有被选中的radio checkbox select
    
    console.log($(':text')); // 单行文本框
    console.log($(':password')); // 密码框
    
    $(':radio'); // 单选框
    $(':checkbox'); // 多选框
    $(':submit'); // 提交按钮
    $(':reset'); // 重置按钮
    $(':button'); // 普通按钮
    $(':file'); // 上传域

    3、节点遍历

    1、位置遍历

    我们根据元素的位置,查找元素的子节点以及元素的兄弟节点,这些方法都可以接收一个筛选条件。

    <div id="box">
        <h3>h3</h3>
        <h3>h3</h3>
        <h2 class="title">h2</h2>
        <h2>h2</h2>
        <h3>h3</h3>
        <h3>h3</h3>
        <h2>h2</h2>
        <h3>h3</h3>
    </div>
    $('#box').children().css('background', 'red'); // 子节点
    $('#box').children('h2').css('background', 'red');
    
    $('.title').next().css('background', 'red'); // 下一个兄弟
    $('.title').nextAll('h3').css('background', 'red'); // 下面所有的兄弟
    
    $('.title').prev().css('background', 'red'); // 上一个兄弟
    $('.title').prevAll().css('background', 'red'); // 上面所有的兄弟
    
    $('.title').siblings().css('background', 'red'); // 当前元素的所有的兄弟

    2、遍历父节点

    根据子元素,查找元素的父节点以及所有的父级节点,parents()可以接收一个筛选条件,返回符合条件的父级节点

    <div class="box1">
        <div class="box2">
            <div class="box3"></div>
        </div>
    </div>
    console.log($('.box3').parent()); // 当前元素的父级
    console.log($('.box3').parents()); // 当前元素所有的祖先级,一直找到html,它可以接收一个筛选条件
    console.log($('.box3').parents('.box1')); // 接收筛选条件

    3、遍历节点-过滤

    find是查找元素的所有子孙节点,而filter是过滤,not则是排除。

    $('ul').find('li').css('background', 'red'); // 子孙节点
    $('li').filter('.box').css('background', 'green'); // 过滤,找到所有的li,再过滤出box
    $('li').not('.box').css('background', 'green'); // 排除box

    4、属性操作

    // 利用原生的attribute实现
    // jQuery对象.attr(属性名)  获取
    // jQuery对象.attr(属性名, 值)  设置
    // jQuery对象.attr({属性名: 值, 属性名: 值})  设置多个
    // jQuery对象.removeAttr(属性名)  删除属性
    
    console.log($('#p1').attr('title')); // 获取
    $('#p1').attr('title', '我是平头哥'); // 设置
    $('#p1').attr({ // 设置多个
        title: '123',
        abc: '456'
    });
    $('#p1').removeAttr('abc'); // 删除属性
    
    // 原码利用点或中括号的形式实现
    // 我们还有一个prop()方法同attr()方法很像,也是操作属性,但是它同attr有区别:
    // 1、只添加属性名称该属性就会生效,应该使用prop
    // 2、只存在true/false属性,应该使用prop
    
    // jQuery对象.prop('属性名'); // 获取
    // jQuery对象.prop('属性名', '值'); // 设置
    // jQuery对象.removeProp('属性名'); // 删除
    
    console.log($('input').prop('checked')); // 获取
    $('input').prop('checked', false); // 设置
    
    // 点击按钮,如果checkbox没有选中,则让它选中,如果选中了,则不让它选中
    $('button').click(function () {
        if ($('input').prop('checked')) {
            $('input').prop('checked', false);
        } else {
            $('input').prop('checked', true);
        }
    })

    5、class相关操作

    jQuery提供了四个操作样式的方法,分别是addClass()追加、removeClass()删除、hasClass()查找、toggleClass()切换。

    一般情况下,我们用class来代替css操作元素的样式。这样更规范。

    // jQuery对象.addClass('class名1 class名2'); // 添加
    // jQuery对象.removeClass('class名'); // 删除
    // jQuery对象.hasClass('class名'); // 是否有
    // jQuery对象.toggleClass('class名'); // 如果没有这个class,则添加,否则删除
    
    $('#box').addClass('p1 p2');
    $('#box').removeClass('abc');
    console.log($('#box').hasClass('abc'));
    $('#box').toggleClass('abc');

    6、css样式操作

    // jQuery对象.css('样式名', '值'); 设置
    // jQuery对象.css('样式名'); 获取
    // jQuery对象.css({'样式名1':'值1', '样式名2':'值2'});
    
    // 1、如果是数字,将会自动转化为像素值。
    // 2、在css方法中,如果属性中带有‘-’符号,例如font-size和background-color属性,如果在设置这些值时,不带引号,那么就要用驼峰式写法。如果带上引号,可以写成font-size也可以写成fontSize。加上引号是个良好的习惯。
    
    $('#box').css('background', 'red');
    $('#box').css({
         200,
        height: 300,
        "font-size": '50px',
        color: 'white'
    })
    
    console.log($('#box').css('backgroundColor'));
    console.log($('#box').css('width'));

    7、html文本及值的操作

    <div id="box1">我就是我</div>
    <div id="box2">我还是我</div>
    <input type="text">
    // innerHTML
    // jQuery对象.html();  获取
    // jQuery对象.html(值);  设置
    console.log($('#box1').html());
    $('#box1').html('我<b>就是</b>我');
    
    // ----------------------
    // innerText
    // jQuery对象.text();  获取
    // jQuery对象.text(值);  设置
    console.log($('#box2').text());
    $('#box2').text('我<b>就是</b>我');
    
    // ------------------
    // value
    // jQuery对象.val();  获取
    // jQuery对象.val(值);  设置
    $('input').val('平头哥');
    console.log($('input').val());

    8、$下常用的方法

    1、循环

    • jQuery对象.each(function (下标, 元素) { });

    注意:访方法只能针对jquery元素,函数中的this指向元素

    $('li').each(function (index, item) {
        // console.log(index, item);
        // console.log(this === item);
    
        $(item).html(index + 1);
    });
    • $.each(对象, function (下标, 元素) { })

    注意:可以针对jquery对象、数组、和普通对象

    针对jq对象

    $.each($('li'), function (index, item) {
        // console.log(index, item);
        $(item).text(index + 1);
    })

    针对数组

    var arr = ['刘备', '关羽', '张飞'];
    $.each(arr, function(index, item){
        console.log(index, item);
    });

    针对普通对象

    var obj = {
        name: 'zs',
        age: 3,
        fn: function () {
            console.log('前端开发');
        }
    };
    $.each(obj, function (key, value) {
        console.log(key, value);
    })

    2、$.map()

    $.map()函数用于使用指定函数处理数组中的每个元素(或对象的每个属性),并将处理结果封装为新的数组返回。

    map()还会为函数传入两个参数:其一是当前迭代的元素或属性值,其二是当前迭代项的数组索引或对象属性名。

    该函数返回值将作为结果数组中的一个元素,如果返回值为null或undefined,则不会被添加到结果数组中。

    $.map(对象, function (元素, 下标) { }) 返回一个数组

    // var arr = ['刘备', '关羽', '张飞'];
    var a = $.map(arr, function (item, index) {
        console.log(item, index);
        return item + '---' + index;
    });
    console.log(a);
    ​
    // -----------------------
    var obj = {
        name: 'zs',
        age: 3,
        fn: function () {
            console.log('前端开发');
        }
    };
    var a = $.map(obj, function (value, key) {
        // console.log(value, key);
        // return value;
        return key;
    });
    console.log(a);

    3、$.extend()

    作用1:对象合并

    $.extend(dest, src1, src2, src3...); // src1 src2 src3都合并到dest上面,返回合并以后的对象

    // 需求:将三个对象的属性,合并到一个对象中
    var o1 = {
        name: 'zs'
    }
    var o2 = {
        age: 3
    }
    var o3 = {
        fn: '前端开发',
        name: '小邓'
    }
    ​
    // $.extend(o1, o2, o3); // o2,o3都合并到o1上
    // console.log(o1);
    // 推荐
    var o = $.extend({}, o1, o2, o3);
    console.log(o);
     

    作用2:对象的深度克隆

    $.extend(true, dest, src1); // src1克隆到dest上面,第一个参数为true,则为深度克隆

    // 作用二:对象克隆
    var o1 = {
        name: 'zs'
    }
    ​
    // // 需求:跟o1一模一样,来一个对象
    // var o = o1; // 不行
    var o = $.extend({}, o1); // 浅克隆
    o.name = '张三';
    console.log(o);
    console.log(o1);
    ​
    // ---------------------------------
    var o1 = {
        name: {
            a: 'zs'
        }
    }
    ​
    // var o = $.extend({}, o1); // 浅克隆(原生ES6有实现)
    var o = $.extend(true, {}, o1); // 深度克隆(原生还没有实现,可以利用JSON.stringfiy()和JSON.parse())
    o.name.a = '张三';
    console.log(o1);
     



  • 相关阅读:
    Mysql实战面试题
    初探Google Guava
    Spring IOC核心源码学习
    用3句话像老太太讲清楚什么是数据库
    matlab如何读入mat型的矩阵
    工作记忆数据处理
    功能连接
    奖励学习
    格兰杰因果关系及其在医学影像数据中的应用
    GC wm
  • 原文地址:https://www.cnblogs.com/cyf666cool/p/13747315.html
Copyright © 2020-2023  润新知