首页 前端知识 【H2O2|全栈】JS进阶知识(一)jQuery(1)

【H2O2|全栈】JS进阶知识(一)jQuery(1)

2024-11-02 10:11:12 前端知识 前端哥 928 519 我要收藏

目录

前言

开篇语

准备工作

$ 对象

概念

DOM和$转化

加载方法

$ 选择器

基本选择器

$ 隐式迭代

$ 筛选操作

筛选选择器 

筛选方法

辅助筛选

$ 链式编程

概念

案例

排他操作

$ 样式操作

css()

单个样式

多个样式

类操作

常见方法

案例 

$ 切换样式动画效果

显示、隐藏

滑动

淡入、淡出

内置动画库

停止动画

结束语


前言

开篇语

本系列博客主要分享JavaScript的进阶语法知识,本期为第一期,主要分享的内容为:jQuery对象、选择器、隐式迭代、筛选操作、链式编程、样式操作以及动画效果等相关重点内容。

从进阶部分开始,我们将脱离原生的JS,使用一些包装的第三方库来完成我们的需求。这些JS库需要在文档的开头引入,暂时的引入格式为script标签加src地址。

与基础部分的语法相比,进阶部分的语法会有较大的差别,注意最好不要混用原生方法与第三方库内容,以免出现不必要的麻烦。

准备工作

软件:【参考版本】Visual Studio Code

插件(扩展包):Open in browser, Live Preview, Live Server, Tencent Cloud AI Code Assistant, htmltagwrap

提示:在不熟练的阶段建议关闭AI助手

第三方JS库:jquery.min.js

提示:请站内搜索下载、引入方式

浏览器版本:Chrome

系统版本: Win10/11/其他非Windows版本

$ 对象

概念

jQuery在JS语法中使用 $ 表示,同时 $ 也是jQuery的顶级对象

我们知道,DOM获取对象的方式类似下面这样——

document.querySelector("div")

document.querySelectorAll("li")

对应的,jQuery也有自己的获取对象的方式——

$("div")

$("li")

用原生js获取过来的对象就是DOM对象, 用jquery方式获取过来的对象就是jQuery对象。

本质上,jQuery通过$把DOM元素进行了包装

DOM和$转化

直接用$包装DOM变量或者直接包裹元素,就可以实现向$的转化——

var a = document.querySelector("a")

// 包装变量

$(a)

// 或者包装元素

$('a')

在实现将$对象向DOM的转化之前,我们不妨输出一下上面的$('a'),看一下控制台输出的东西——

可以看到,$对象类似一个伪数组,因此,我们可以使用类似数组索引的方式来获取$中的DOM元素——

$('a')[0] 

此外,$还提供了get()方法,参数为“索引值 ”——

$('a').get(0)

加载方法

与DOM操作中的window.onload()类似,如果想要加载$的函数(方法),可以直接用$()包装匿名函数——

$(function () {

        \\ 你的函数

}) 

$ 选择器

基本选择器

与querySelector类似,$也可以使用选择器来调用元素。

常见的$调用的选择器(示例)如下——

选择器名称

$('#xxx')

id选择器

$('.xxx')

class类选择器

$('标签名/元素名')

标签选择器

$('*')

通配符选择器

$('ol,ul')

并集选择器

$('li .p')

交集选择器

$ 隐式迭代

对于下面的四个div——

<div>111111</div>

<div>222222</div>

<div>333333</div>

<div>444444</div>

如果需要遍历所有的div,并且将div的底色设置为绿色,可以怎么做?

如果使用原生JS的方法,我们需要在获取一组div之后,利用索引遍历,然后分别设置背景色属性。

var divs = document.querySelectorAll("div")

for (var i = 0; i < divs.length; i++) {

        divs[i].style.background = "#0f0"

注意,$无法使用style属性, 需要使用其内置的方法css,这个我们后面会讲。

所谓隐式迭代,就是把匹配的所有元素内部进行遍历循环,给每一个元素添加css这个方法——

$("div").css("background", "green")

$ 筛选操作

筛选选择器 

筛选选择器用于筛选符合某一条件或者具有某种属性的基本选择器。

常见的筛选选择器如下——

选择器作用
:first选取第一个元素
:last选取最后一个元素

:eq(index)

选取第index个元素,从0开始

:odd

奇数选择器
:even偶数选择器

使用方法举例——

$('ul li:first') 

同样的,我们也可以使用这种方式选择具有某一属性的选择器。

比如选择设置了checked属性的input元素——

$('ul li:checked')

筛选方法

$常见的筛选元素的方法如下——

方法作用
parent()选择最近父级
children()选择所有直接子代,类似子代选择器
find('xxx')选择指定的子代,类似后代选择器
siblings()选择所有同级
nextAll()选择所有本元素之后的同级
prevAll()选择所有本元素之前的同级
eq(index)选择指定index处的同级

辅助筛选

此外,我们还有两个方法用于辅助我们筛选元素——

方法作用
index()获取指定元素的index
hasClass('xxx')筛选判断是否具有xxx类名的同级,返回boolean值

$ 链式编程

概念

$ 的方法可以连续调用,所以当我们对同一个$对象操作时,可以使用链式编程操作,把所有的连续操作拼接到一行代码中。

案例

排他操作

我们可以使用链式编程,来很方便地完成排他操作

比如,对于下面的一组按钮——

    <button>点我变红</button>
    <button>点我变红</button>
    <button>点我变红</button>
    <button>点我变红</button>
    <button>点我变红</button>
    <button>点我变红</button>

想要实现点击的按钮变红,而其他的按钮不变红的操作,需要完成排他操作:

  1. 先为自己加样式
  2. 清除兄弟元素样式

使用$的链式编程将会非常简洁——

    $(function () {
        $("button").click(function () {
            $(this).css("background", "#f00").siblings().css("background", "")
        })
    })

$ 样式操作

css()

单个样式

$ 的.css()方法可以用于设置元素的样式。

该方法只有一个参数的时候是获取属性值。比如获取div元素的背景色属性——

$('div').css("background")

写两个的时候是设置属性值,第一个参数为属性名,第二个参数为属性值。

比如将div元素的背景色设置为红色——

$('div').css("background", "red")

多个样式

.css()也支持同时设置多个CSS样式,需要使用 { } ,使用添加一个对象的方法设置属性。

比如将div元素的宽和高同时设置——

$('div').css({

        width: '100px',

        height: '100px'

})

注意,值需要写为字符串类型。 

类操作

常见方法

如果样式比较多,这个时候最好让样式和行为分离,即CSS处理样式,JS负责行为。 

虽然使用css()可以设置大量的属性,但是使用类操作来直接更改类名会更加符合上述的要求。

常见的类操作方法如下——

方法作用
addClass('abc')在原类名后添加类名
removeClass('abc')从原来的一组类名中移除指定类名
toggleClass('abc')在添加该类名和移除该类名之间切换

原生JS的设置className的方式是直接覆盖所有原来的类名,而$的操作是不会影响其他类名的。

案例 

Q:实现tab栏切换至标签对应的分区。 

示例效果如下——

A:分析案例——

首先,按照惯例给出无关紧要的HTML代码和CSS样式。

参考HTML代码如下——

    <div class="tab">
        <div class="tab_list">
            <ul>
                <li class="current">商品介绍</li>
                <li>规格与包装</li>
                <li>售后保障</li>
                <li>商品评价(50000)</li>
                <li>手机社区</li>
            </ul>
        </div>
        <div class="tab_con">
            <div class="item" style="display: block;">
                商品介绍模块内容
            </div>
            <div class="item">
                规格与包装模块内容
            </div>
            <div class="item">
                售后保障模块内容
            </div>
            <div class="item">
                商品评价(50000)模块内容
            </div>
            <div class="item">
                手机社区模块内容
            </div>

        </div>
    </div>

 参考CSS样式如下——

        * {
            margin: 0;
            padding: 0;
        }

        li {
            list-style-type: none;
        }

        .tab {
            width: 978px;
            margin: 100px auto;
        }

        .tab_list {
            height: 39px;
            border: 1px solid #ccc;
            background-color: #f1f1f1;
        }

        .tab_list li {
            float: left;
            height: 39px;
            line-height: 39px;
            padding: 0 20px;
            text-align: center;
            cursor: pointer;
        }

        .tab_list .current {
            background-color: #c81623;
            color: #fff;
        }

        .item_info {
            padding: 20px 0 0 20px;
        }

        .item {
            display: none;
        }

其中current为标签tab栏激活样式。

来到关键的JS部分,我们需要对tab栏的标签绑定点击事件,并进行两次链式操作——

  1. 为当前标签设置current类名,然后移除其他标签的current类名
  2. 显示当前激活标签对应的内容区域(利用索引),隐藏其他内容区域

实现的jQuery代码如下——

$("ul li").click(function () {
    $(this).addClass("current").siblings().removeClass("current")
    $(".tab_con>div").eq($(this).index()).css("display", "block").siblings().css("display", "none")
})

$ 切换样式动画效果

显示、隐藏

除了使用修改css样式来决定元素是否隐藏,$还提供了下面三种相关的方法——

方法作用
show()显示元素
hide()隐藏元素
toggle()切换元素的显示与隐藏状态

这三种方法的参数都是一样的,具有一定的动画效果。 

不填参数时,上述过程立刻执行完成。

填写数字,效果为在一定时间内执行上述操作,单位为毫秒。

填写数字和动画形式,效果为在一定时间内按照某种动画效果执行上述操作。

比如,常见的动画形式有swing(变速)和linear(线性匀速)。

滑动

此前,我们实现了下拉菜单栏的效果,$内置了下拉滑动和向上回弹的方法。

相关的方法如下——

方法作用
slideDown()向下滑入
slideUp()向上滑出
slideToggle()切换滑入滑出状态

参数同显示隐藏。

淡入、淡出

所谓淡入淡出效果,就是缓慢显色和缓慢褪色的效果。

相关的方法如下——

方法作用
fadeIn()淡入
fadeOut()淡出
fadeToggle()切换淡入淡出效果

参数同显示隐藏。 

内置动画库

使用的第三方动画库为move.js,感兴趣的可以自行搜索。

使用内置动画的方法为animate(),调用格式为——

animate({修改的样式}, 时间, 动画效果, 回调函数)

内置动画库涉及其他的第三方库,这里就不作为重点扩展了。 

停止动画

停止动画的两种方法为——

方法作用
stop()依据条件,停止动画
finish()立刻完成所有动画

stop()方法可以按照链式编程操作添加到当前动画方法之前。

无参数时,停止当前动画,如果有其它动画开始执行。

有一个参数true,停止所有动画。

有两个参数均为true,立即执行完当前动画  停止其它所有动画。

结束语

本期内容到此结束。关于本系列的其他博客,可以查看我的JS进阶专栏。

在全栈领域,博主也只不过是一个普通的萌新而已。本系列的博客主要是记录一下自己学习的一些经历,然后把自己领悟到的一些东西总结一下,分享给大家。

文章全篇的操作过程都是笔者亲自操作完成的,一些定义性的文字加入了笔者自己的很多理解在里面,所以仅供参考。如果有说的不对的地方,还请谅解。

==期待与你在下一期博客中再次相遇==

——临期的【H2O2】

     

转载请注明出处或者链接地址:https://www.qianduange.cn//article/19754.html
标签
评论
发布的文章
大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!