JavaScript课程——Day20(jQuery:使用、选择器、节点遍历操作、其他属性操作)

1、初识jQuery

  1.1、什么是jQuery

  jQuery是一个优秀的JavaScript库,是一个由John Resig创建于2006年1月的开源项目。jQuery是一个快速、小型、功能丰富的JavaScript库。其设计的宗旨是“write less,do more”,即倡导写更少的代码,做更多的事情。

 

  1.2、jQuery的作用

  jQuery封装了JavaScript常用的功能代码,优化了DOM操作、事件处理、动画设计和Ajax交互,学习jQuery的本质就是学习如何调用这些函数。

 

  1.3、jQuery的优势

  jQuery强调的理念是写得少,做得多,jQuery独特的选择器、链式操作、事件处理机制和封装完善的ajax都是其他库望尘莫及的。概括起来,jQuery有以下优势。

  • 轻量级,核心文件才几十kb
  • 简化了DOM操作、事件处理、动画设计和Ajax交互
  • 强大的选择器功能
  • 链式操作、隐式迭代
  • 丰富的插件支持
  • 免费、开源

 

  1.4、jQuery下载

    英文官网:https://jquery.com/

    中文官网:https://www.jquery123.com/

 

  1.5、类库说明

  jQuery库的类型分为两种,分别是生产版本(最小话和压缩)和开发版(未压缩版),它们的区别是:

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

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

 

  1.6、版本介绍

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

 

  1.7、引入jQuery

  jQuery不需要安装,它就是一个js文件,把下载的jQuery放到一个公共的位置,想要在某个页面上使用时,只需要在相关的HTML文档中引入该库文件即可。

  一般可以放在head标签中或者body标签结束前面,但是一定要注意,要在其他js文件前面引入jQuery库。

  当我们需要使用jQuery的时候,会在HTML文档中引入jQuery.js,可以通过以下两种方式引入:

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

 

  1.8、什么是$

  $是jQuery的别名,也可以使用jQuery替代,但是为了方便,会直接使用$。

  $是jQuery的顶级对象,相当于原生JavaScript中的window。把元素利用$包装成jQuery对象,就可以调用jQuery的方法。

 

2、jQuery的使用

  2.1、页面加载

// 原生:是文档、css、js、图片等等相关的资源都加载完成了之后,再调用函数
window.onload = function () {
    console.log('我是原生的,我执行了');
}

// -----------------------------
// document准备好了(浏览器已经将文档加载完成了),就调用这个函数
$(document).ready(function () {
    console.log('我是JQ,我执行了');
});
// jq简写
$(function () {
    console.log('我是JQ的简写,我也执行了');
})

// ---------------------------
// $(document).ready(function (){}) 同 window.onload = function (){}的区别:
// 1、执行时机不同,window.onload 必须等待网页中文档和资源都加载完成才能执行,而$(document).ready()是等文档加载完成后调用。
// 2、window.onload 只能写一个,多个时后面的会覆盖掉前面的,而$(document).ready()可以写多个,不会覆盖。
// 3、window.onload 没有简写形式,而$(document).ready()可以简写成$(function(){})。

 

  2.2、DOM对象和jQuery对象

<div id="box"></div>
<script>
    // 区分清楚DOM对象和JQ对象,因为DOM对象只能使用原生的方法,而JQ只能使用JQ的方法
    // 两者可以共存,不能混用
    $(document).ready(function () {
        // 原生获取元素
        var box = document.getElementById('box');
        console.log(box);

        // jq
        var $box = $('#box');
        console.log($box);
    });
</script>

 

  2.3、互转

// jq转原生
var $box = $('#box');

// 方式1  不是JQ提供的,是我们看出来的   
// 格式:jQuery对象[下标]  得到对应下标的原生元素
console.log($box[0]);

// 方式2   是JQ提供的
// 格式:jQuery对象.get(下标)   如果有下标,获取对应的元素,如果没有下标,返回一个数组
console.log($box.get(0));
console.log($box.get());

// ---------------------------------

// 原生转jq
// 格式:$(原生)
var box = document.getElementById('box');
console.log($(box));

 

3、选择器

选择器是 jQuery 的根基,在 jQuery 中,对事件处理、遍历 DOM 和 Ajax 操作都依赖于选择器。如果能熟练地使用选择器,不仅能简化代码,而且可以达到事半功倍的效果。

jQuery 中的选择器完全继承了 CSS 的风格。利用 jQuery 选择器,可以非常便捷和快速地找出特定的 DOM 元素,然后为它们添加相应的行为,而无需担心浏览器是否支持这一选择器。学会使用选择器是学习 jQuery 的基础,jQuery 的行为规则都必须在获取到元素后才能生效。

 

  3.1、基本选择器

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

<div id="box">小张</div>
<p class="abc">小耗子</p>
<ul class="ul1">
    <li>html</li>
    <li>css</li>
    <li>js</li>
</ul>
<ul class="ul2">
    <li>吃饭</li>
    <li>睡觉</li>
    <li>打豆豆</li>
</ul>

<script>
    $(function () {
        $('#box').css('background', 'red');
        $('.abc').css('background', 'pink');
        $('li').css('font-size', '30px'); // jQuery帮我们循环了

        $('#box, .abc, li').css('color', 'yellow'); // 群组
        $('.ul1 li').css('border', '3px solid #ccc');
    })
</script>

 

  3.2、层次选择器

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

<ul>
    <li>
        <ol>
            <li>html</li>
            <li>css</li>
            <li>js</li>
        </ol>
    </li>
    <li>吃饭</li>
    <li class="abc">睡觉</li>
    <li>打豆豆</li>
    <li>小张</li>
</ul>
<script>
    // 如果想通过 DOM 元素之间的层次关系来获取特定元素,例如后代元素、子元素、相邻元素和同辈元素等,那么层次选择器是一个非常好的选择。

    $('ul li').css('border-bottom', '3px solid #ccc'); // 子孙元素
    $('ul>li').css('border-bottom', '3px solid #ccc'); // 子元素

    $('.abc + li').css('background', 'red'); // 下一个兄弟元素
    $('.abc').next().css('background', 'red');


    $('.abc ~ li').css('background', 'red'); // 下面所有的兄弟元素
    $('.abc').nextAll().css('background', 'red');
</script>

 

  3.3、过滤选择器

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

<ul>
    <li>00</li>
    <li>11</li>
    <li>22</li>
    <li class="abc">33</li>
    <li class="abc">44</li>
    <li>55</li>
    <li>66</li>
    <li>77</li>
</ul>
$('li:first').css('background', 'red'); // 第一个元素
$('li:last').css('background', 'red'); // 最后一个元素
$('li').first().css('background', 'green');
$('li').last().css('background', 'green');

$('li:even').css('background', 'red'); // 下标为偶数行的
$('li:odd').css('background', 'yellow'); // 下标为奇数行的

$('li:eq(3)').css('background', 'red'); // 下标为3的
$('li').eq(3).css('background', 'green');

$('li:lt(3)').css('background', 'red'); // 下标小于3的
$('li:gt(3)').css('background', 'yellow'); // 下标大于3的

$('li:not(.abc)').css('background', 'red'); // 排除class为abc的
$('li').not('.abc').css('background', 'pink');

 

  3.4、表单选择器

  为了使用户能够更灵活的操作表单,jQuery中专门加入了表单选择器。利用这个选择器,能极其方便的获取到表单的某个或某类型的元素。

  • $(':checked');    选取所有被选中的input标签
  • $(':input');     选取所有input、textarea、select、button元素
  • $(':text');     所有单行文本框,即类型为:type="text"
  • $(':password');    密码框
  • $(':radio');     单选框
  • $(':checkbox');     多选框
  • $(':sunmit');    提交按钮
  • $(':reset');     重置按钮
  • $(':button');    普通按钮
  • $(':file');     上传域
<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="">
</form>

<script>
    // console.log($(':input')); // input textarea select button
    // console.log($(':text')); // 单行文本框
    // console.log($(':password')); // 密码框 
    // console.log($(':radio')); // 单选框

    console.log($(':radio:checked')); // 单选框中的选中元素
</script>

 

  3.5、下标

<ul>
    <li>吃饭</li>
    <li>睡觉</li>
    <li>打豆豆</li>
</ul>

<script>
    // 元素.onclick = function(){}

    // 给所有的li绑定一个点击事件
    $('li').click(function () {
        // console.log(this); // 原生的
        console.log($(this).index()); // 元素的下标
    })
</script>

 

4、节点遍历操作

  4.1、遍历父节点

<div class="box1">
    <div class="box2">
        <div class="box3"></div>
    </div>
</div>

<script>
    console.log($('.box3').parent()); // 父级
    console.log($('.box3').parents()); // 祖先级
    console.log($('.box3').parents('div')); // 祖先级
</script>

 

  4.2、兄弟节点

<ul>
    <li>11</li>
    <li>22</li>
    <li>33</li>
    <li class="abc">44</li>
    <li>55</li>
    <li class="bbb">66</li>
</ul>

<script>
    $('.abc').next().css('background', 'red'); // 下一个兄弟
    $('.abc').nextAll().css('background', 'red'); // 下面所有的兄弟

    $('.abc').prev().css('background', 'red'); // 上一个兄弟
    $('.abc').prevAll().css('background', 'red'); // 上面所有的兄弟

    $('.abc').siblings().css('background', 'red'); // 所有的兄弟
    $('.abc').siblings('.bbb').css('background', 'red'); // 接收一个筛选条件

    $('li').filter('.abc').css('background', 'green'); // 过滤
    $('li').not('.abc').css('background', 'green'); // 排除
</script>

 

  4.3、遍历子节点

<ul>
    <li>
        <ol>
            <li>html</li>
            <li>css</li>
            <li>js</li>
        </ol>
    </li>
    <li>吃饭</li>
    <li class="abc">睡觉</li>
    <li>打豆豆</li>
    <li>小张</li>
</ul>
<script>
    // 找孩子
    $('ul').children().css('border-bottom', '3px solid #ccc');
    $('ul').children('.abc').css('border-bottom', '3px solid #ccc');

    // 找所有的子孙节点
    $('ul').find('li').css('border-bottom', '3px solid green');

 

5、其他属性操作

  5.1、文本及值的操作

// html----innerHTML
// 获取:jQuery对象.html()
// 设置:jQuery对象.html(值)
console.log($('#box1').html());
$('#box1').html('东风吹,<em>战鼓</em>擂');

// -------------------------
// text----innerText
// 获取:jQuery对象.text()
// 设置:jQuery对象.text(值)
console.log($('#box2').text());
$('#box2').text('东风吹,<em>战鼓</em>擂');

// -----------------------------
// val----value
// 设置:jQuery对象.val(值);
// 获取:jQuery对象.val();
$('input').val('平头哥');
console.log($('input').val());

 

  5.2、遍历

// jQuery对象.each(function (index, item) {});
// index下标   item即每一项

$('li').each(function (index, item) {
    // console.log(index, item); 
    // console.log(this == item); // this和item都是原生的

    $(item).html(index);
});

 

  5.3、属性操作

    5.3.1、attr

// attr方法
// 它可以操作自定义属性 原码用attribute实现
// 获取:jQuery元素.attr('属性名')
// 设置:jQuery元素.attr('属性名', '值')
// 删除:jQuery元素.removeAttr('属性名')

console.log($('#box').attr('title'));
$('#box').attr('title', '小张在飞');

console.log($('#box').attr('abc'));
$('#box').attr('abc', '小王');

$('#box').removeAttr('title');
$('#box').removeAttr('abc');

 

    5.3.2、prop

// prop方法
// 1、在操作固有属性时,应该使用 prop
// 2、只存在 true/false 属性,应该使用 prop
// 获取:jQuery元素.prop('属性名')
// 设置:jQuery元素.prop('属性名', '值')

console.log($(':checkbox').prop('checked')); // 获取 true/false
$(':checkbox').prop('checked', true); // 设置
posted @ 2021-05-16 11:11  别动我咖喱  阅读(69)  评论(0编辑  收藏  举报