jQuery 基础入门速成下篇

news2024/10/6 1:43:33

jQuery高级


事件冒泡

什么是事件冒泡?

        在一个对象上触发某类事件,此对象上定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,直到它被处理,或者到达对象层次的最顶层,即document对象;

事件冒泡作用?

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

阻止事件冒泡?

        事件的冒泡有时候是不需要的,是多余的,需要阻止掉,通过event.stopPropagation()阻止

// 外层box1 里层box2
$(function(){    
    var $obox1 = $('.box1')
    var $obox2 = $('.box2')
    $obox1.click(function(){console.log(1)});
    $obox2.click(function(){console.log(2)});
})
// 冒泡结果 2 1
// 阻止冒泡
$obox2.click(function(event){ event.stopPropagation(); console.log(2); })

 合并阻止操作?

// 阻止冒泡
event.stopPropagation()
// 阻止默认行为
event.preventDefault()

// 合并写法
return false

$obox2.click(function(event){ 
    // event.stopPropagation();
    console.log(2);
    return false
})

案例 —— 弹窗

        完成下面这张图的效果,起初弹窗默认是关闭的,通过按钮控制弹窗将其开启,会出现中间的主体和外面的遮罩层,点击遮罩层可以实现关闭弹窗,也可以通过手动关闭按钮来关闭弹窗,点击到中间的主体范围不会触发关闭弹窗,因为这个弹窗可能需要做其他操作,比如这个更新按钮点击,或者是提交一些别的信息,所以主体这块内容需要进行冒泡的处理。

 【小白解析思路:首先为按钮来添加点击事件控制弹窗的显示和隐藏,以及为关闭按钮设置点击事件,隐藏和显示的方法可以用hide()和show() 

$('#btn').click(function(){ $('#main').show() })
$('#close').click(function(){ $('#main').hide() })

外部的遮罩层可以用这个document对象

$(document).click(function(){ $('#main').hide() })

使用这个方法你会发现它的一个问题,点击之后没反应,这里不是没反应,是太快了!点击input按钮之后会进行冒泡到body,所以从开始的hide() —— show() —— hide() : 用定时器测试一下:

// 测试 :input冒泡 —— body —— document 
$(document).click(function(){ 
    setTimeout(function(){
        $('#main').hide() 
    },2000)
})

那么这里需要来做的就是来阻止事件的一个冒泡行为;

主体的内容是这个 class = "content" 的内容,当鼠标点击主体内容的范围会发生这个冒泡,从这个content 向 class = "main" ... 向外冒泡,所以需要阻止class="content"向外冒泡的行为。

$('.content').click(function(){ return false })

最后将整体的代码放置在下面,样式的话自行编写!】

<body>
    <input type="button" value="弹窗" id="btn"/>

    <div class="main" id="main">
        <div class="content">
            <div class="cTitle">
                <h3>更新提示</h3>
                <a href="" id="close"> x </a>
            </div>
            <div class="cDetail">
                <p>
                    <span> >· 软件应用版本可更新 V 1.2.0</span>
                    <ul>
                        <li><a href="">自动更新 -></a></li>
                        <li><a href="">手动更新 -></a></li>
                    </ul> 
                </p>
            </div>
        </div>
    </div>

    <script>   
        // 阻止事件的冒泡即可
        $('#btn').click(function(){ $('#main').show();return false; })
        $('#close').click(function(){ $('#main').hide() })
        // 点击弹框
        $(document).click(function(){ $('#main').hide() })
        // $('.content').click(function(event){ event.stopPropagation() })
        $('.content').click(function(){ return false })
    </script>
</body>

事件的委托

        事件的委托就是利用冒泡的原理,将事件绑定在父级上,子集发生的事件都会冒泡到父级,父级通过判断子级的特征给它特定的操作。事件委托首先可以极大减少事件的绑定次数,提高性能;其次可以让新加入的子元素也可以拥有相同的操作。

// 一般写法
$(function(){
    $li = $('#list li');
    $li.click(function(){
        $(this).css({ color:'red' })
    })
})


<ul id="list">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
</ul>

        事件委托写法性能更好;

// 事件委托
$ul = $('#list');
$ul.delegate('li','click',function(){
    $(this).css({ color:'red' })
})

 DOM操作

元素节点操作指的是改变html的标签结构,它有两种情况:

        1. 移动现有标签的位置

        2. 将新创建的标签插入到现有的标签中

创建新标签

var $div = $('<div>')     // 创建一个空div
var $div = $('<div>这是一个div元素</div>')

移动或插入标签的方法

1. append() 和 appendTo() ,在现存元素的内容,从后面放入元素

<div id="obox"></div>

var $span = $('<span>这是一个span元素</span>')
$('#obox').append($span)
$span.appendTo('#obox')

 2. 2. prepend() 和 prependTo ,在现存元素的内容,从前面放入元素

 

 3. after() 和 insertAfter() ,在现存元素的内容,从后面放入元素

4. before() 和 insertBefore() ,在现存元素的内容,从前面放入元素

 5. remove() 删除标签

// remove() 删除标签
$('#obox').remove()

案例 —— 待办事项

 【小白思路解析:这个案例想必很多人都挺熟悉的了,一个类似待办备忘录的例子,主要通过输入框来获取输入的数据( val() ),通过添加按钮触发点击事件( click ),将内容和模板内容插入到对应的节点上( append() ),同时可以对插入的节点进行DOM操作,删除上移下移操作,删除操作的动画是向右边移动逐渐消失被删除( animate() ),这个在上一篇的内容中的动画讲到了可以进行结合复习一下,这里对应的上下图标用的是font-awesome】

附上地址:Font Awesome,一套绝佳的图标字体库和CSS框架

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" integrity="sha512-SfTiTlX6kk+qitfevl/7LibUOeJWlt9rbyDn92a1DqWOw9vWG2MFoays0sgObmWazO5BQPiFucnnEAjpAB+/Sw==" crossorigin="anonymous" referrerpolicy="no-referrer" />
    <script src="./jquery-3.6.4.min.js"></script>
    <style> /* 自行编写 */ </style>
</head>
<body>
    <div class="content">
        <h2>List 待办 | To do</h2>
        <input type="text" id="inText" class="inTxt"/>
        <input type="button" value="添加" id="btn" class="addbtn"/>
        
        <ul id="list">
            <li>
                <span class="addText">记录今天有趣的待办事情吧!</span>
                <a href="javascript:;" id="del" class="del">删除</a>
                <a href="javascript:;" id="up" class="up"><i class="fa fa-long-arrow-up"></i></a>
                <a href="javascript:;" id="down" class="down"><i class="fa fa-long-arrow-down"></i></a>
            </li>
        </ul>
    </div>

    <script>
        $(function(){
            var $inText = $('#inText')  
            var $addbtn = $('#btn')
            var $del = $('#del')
            var $list = $('#list')

            // 添加事件
            $addbtn.click(function(){
                var $inVal = $inText.val() 
                if($inVal == ''){
                    alert('请先输入内容..')
                    return 
                }

                // 节点模板
                var $li = $('<li><span class="addText">' + $inVal
                    + '</span><a href="javascript:;" class="del" >删除</a><a href="javascript:;" class="up"><i class="fa fa-long-arrow-up"></i></a><a href="javascript:;" class="down"><i class="fa fa-long-arrow-down"></i></a></li>')
                    
                // 插入节点
                var $list = $('#list')
                $list.append($li)

                // 清空输入框
                $inText.val('') 
            })

            // 删除事件 - 性能低
            // $del.click(function(){
            //     // $(this).parent().remove()
            //     $(this).remove()
            // })

            // 事件委托代理
            $list.delegate('a','click',function(){
                // 判断所选操作:删除 上 下
                var $cVal = $(this).prop('class');
                // 删除
                if($cVal == 'del'){
                    // 动画效果
                    $(this).parent().animate({left:'200px',opacity:'0'},500,'linear',function(){
                        // $(this).parent.remove()
                        $(this).remove()
                    })
                }
                // 上移
                if($cVal == 'up'){
                    // prev() 找到每个段落紧邻的前一个同辈元素
                    $(this).parent().insertBefore($(this).parent().prev())
                }
                // 下移
                if($cVal == 'down'){
                    // insertAfter()
                    $(this).parent().insertAfter($(this).parent().next())
                }
            })
        })
    </script>
</body>
</html>

Ajax

局部刷新和异步刷新

        ajax 可以实现局部刷新,也称无刷新,无刷新指的是页面整体不进行刷新,只做局部刷新,ajax可以自己发送http数据请求,不需要通过浏览器的url地址栏,所以页面整体不会进行刷新,ajax获取后台数据,更新页面显示数据的部分,就做到了页面局部刷新

ajax 请求

$.ajax使用方法,参数

url         请求地址
type        请求方式,默认是'GET',常用的还有'POST'
dataType    设置返回数据的格式,常用的是'json'格式 
data        设置发送给服务器的数据
success     请求成功后的回调函数
error       请求失败后的回调函数
async       设置是否异步,默认true,表同步

1 )过去的写法

$.ajax({
    url:'/api/swiperList',
    type:'GET',
    dataType:'json',
    data:{ 'code':0 }
    success:function(data){
        alert(data);
    }
    error:function(err){
        alert(err);
    }
})

2 )新的写法推荐

$.ajax({
    url:'/api/swiperList',
    type:'GET',
    dataType:'json',
    data:{ 'code':0 }
})
.done(function(data){
    alert(data)
})
.fail(function(err){
    alert(err)
})

        这里来测试一下,需要用到测试数据的结构,这里可以看一下 微信小程序搭载node.js服务器

搭载的测试接口服务器,内容比较简单容易上手,下面就使用它来做$.ajax() 请求测试:

<div id="msg"></div>
<script>
    $.ajax({
        url:'http://127.0.0.1:3000/api/swiperList',
        method:'GET',
        dataType:'json',
        // success:function(data){
        //     console.log(data)
        // },
        // error:function(err){
        //     console.log(err)
        // }
    })
    .done(function(data){ console.log(data);$('#msg').html('<p>' + data.data.swiperList[0].imgUrl + '</p>') })
    .fail(function(err){ console.log(err) })
</script>


读取文件

        ajax 读取txt文件,将读取的内容显示在页面上。在Node.js服务器上创建这样一个接口,读取public中的test.txt文件,将读取的内容返回到客户端即可。

test.txt 文件内容

这是一个测试文本

        接口测试可以拿到数据,下面通过 ajax 来读取并显示在页面上:

<div id="msg"></div>
<script>
    $.ajax({
        url:'http://127.0.0.1:3000/test.txt',
        method:'GET',
        dataType:'text',
    })
    .done(function(data){ 
        console.log(data);
        // 插入节点
        $('#msg').html('<p>' + data + '</p>')
    })
    .fail(function(err){ console.log(err) })
</script>


 读取 json数据

        ajax 读取 json文件,将读取的文件显示在页面上。

test.json

{
    "name":"syan",
    "age":"18"
}

        接口测试可以拿到数据,下面通过 ajax 来读取并显示在页面上:

<div id="msg"></div>
<script>
    $.ajax({
        url:'http://127.0.0.1:3000/test.json',
        method:'GET',
        dataType:'json',
    })
    .done(function(data){ 
        console.log(data);
        // 插入节点
        var arr = data
        var temp = ''
        for(var i = 0;i<arr.length;i++){
            console.log(arr[i].name,arr[i].age)
            temp += '姓名:' + arr[i].name + ',年龄:' + arr[i].age + '<br>'
        }
        $('#msg').html(temp)
    })
    .fail(function(err){ console.log(err) })
</script>

         本篇内容就到此结束了,感谢大家的支持!!!附上前一篇内容的链接,感兴趣的读者可以前往阅读。

: jQuery 基础入门速成上篇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/443783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

门禁系统中人脸检测技术的原理剖析和使用教程

引言 人脸检测 API 是一种基于深度学习技术的图像处理API&#xff0c;可以快速地检测出一张图片中的人脸&#xff0c;并返回人脸的位置和关键点坐标&#xff0c;在人脸识别系统、人脸情绪识别等多种场景下都有极大的应用。 本文将从人脸检测的发展历程、原理、特点等角度出发…

第五章 RNN

目录 5.1 概率和语言模型5.1.1 概率视角下的 word2vec5.1.2 语言模型5.1.3 将CBOW模型用作语言模型&#xff1f; 5.2 RNN5.2.1 循环的神经网络5.2.2 展开循环5.2.3 Backpropagation Through Time5.2.4 Truncated BPTT5.2.5 Truncated BPTT的mini-batch学习 5.3 RNN的实现5.3.1 …

【博云+智领云】携手云原生大数据领域,开展深度合作

近日&#xff0c;博云与LinkTimeCloud智领云达成战略合作伙伴关系&#xff0c;基于此前坚实合作基础&#xff0c;全面拓宽合作广度与深度&#xff0c;共同推出基于Kubernetes的企业级容器云云原生大数据技术融合的新型数字化IT底座&#xff0c;并且在某国家级创新中心首次落地。…

高精度的乘除法(C++实现)

前言&#xff1a;我们都熟知高精度的加减法可以用字符串来模拟实现&#xff0c;其实乘除法的高精度计算也和加减法类似却也略有不同&#xff0c;下面我们一起来看一下高精度的乘除法的模拟实现&#xff0c;希望可以帮助到大家。 目录 1.高精度乘法的实现 1.1原理重点难点解析…

一图看懂 pyexcel 模块:提供统一 API用来读写操作 Excel 文件的库, 资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 pyexcel 模块&#xff1a;提供统一 API用来读写操作 Excel 文件的库, 资料整理笔记&#xff08;大全&#xff09; 摘要模块图类关系图模块全展开【pyexcel】统计常量模块1 …

ABAP:自定义搜索帮助:可参考标准函数F4IF_SHLP_EXIT_EXAMPLE

当我们在自定义选择屏幕中&#xff0c; 需要写入我们自定义的搜索帮助的时候&#xff0c;可以通过预定义函数来实现&#xff1a; 实例说明&#xff1a; 第一步&#xff1a;创建搜索帮助SE11分销渠道(Z_VTWEG) 1.选择基本索引帮助&#xff1a; 2.选择参考表&#xff0c;因为这…

Java 基础——HashMap 底层数据结构与源码分析

目录 1.HashMap 简介2.HashMap 底层数据结构2.2.JDK1.8 之前2.3.JDK1.8 及以后 3.常量定义3.1.默认初始化容量3.2.最大容量3.3.负载因子3.4.阈值 4.HashMap 源码分析4.1.构造函数4.2.Node<K, V>4.2.put(K key, V value)流程源码 4.3.get(Object key)流程源码 4.4.resize(…

java使用阿里云oss上传文件

java使用阿里云oss上传文件 1、oss 是什么&#xff1f; OSS是阿里云对象存储服务&#xff08;Object Storage Service&#xff09;的一个简称&#xff0c;它是阿里云提供的海量、安全、低成本、高可靠的云存储服务。 即开即用、无限大空间的存储集群。相较传统建服务器存储而…

逻辑回归模型预测

范例题目&#xff1a; 建立一个逻辑回归模型预测一个学生是否通过研究生入学考试。N表示训练集中学生个数&#xff0c;Score1、Score2、 Score3、 Score4是N维数组&#xff0c;分别表示N个学生研究生初试、专业课复试、英语面试成绩、专业课面试成绩。Admitted是N维{0,1}数组&a…

RabbitMQ编程模型

RabbitMQ基础概念 RabbitMQ是基于AMQP协议开发的一个MQ产品。 虚拟主机 virtual host RabbitMQ出于服务器复用的想法&#xff0c;可以在一个RabbitMQ集群中划分出多个虚拟主机&#xff0c;每一个虚拟主机都有AMQP的全套基础组件&#xff0c;并且可以针对每个虚拟主机进行权…

面向对象(高级)-Annotation注解、单元测试的使用

注解&#xff08;Annotation&#xff09; 注解大纲 注解的使用1.Annotation的理解 - 注解&#xff08;Annotation&#xff09;是从JDK5.0开始引入&#xff0c;以注解名在代码中存在。 - Annotation可以像修饰符一样被使用&#xff0c;可用于修饰包、类、构造器、方法、成员变…

LeetCode:59. 螺旋矩阵 II

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; &#x1f33b;算法&#xff0c;不如说它是一种思考方式&#x1f340; 算法专栏&#xff1a; &#x1f449;&#x1f3fb;123 一、&#x1f331;59. 螺旋矩阵 II 题目描述&#xff1a;给你一个正整数 n &#xff0c…

Python中类属性和类方法

1. 类的结构 1.1 术语 —— 实例 使用面相对象开发&#xff0c;第 1 步 是设计 类使用 类名() 创建对象&#xff0c;创建对象 的动作有两步&#xff1a; (1) 在内存中为对象 分配空间 (2) 调用初始化方法 __init__ 为 对象初始化对象创建后&#xff0c;内存 中就有了一个对象…

【敲敲云】零代码实战,主子表汇总统计—免费的零代码产品

近来很多朋友在使用敲敲云时&#xff0c;不清楚如何使用主子表&#xff0c;及如何在主表中统计子表数据&#xff1b;下面我们就以《订单》表及《订单明细》表来设计一下吧&#xff0c;用到的组件有“设计子表”、“公式”、“汇总”等。 《订单》表展示 总金额 订单明细中“小…

C++ Linux Web Server 面试基础篇-操作系统(三、进程通信)

⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支持一下呗。👍⭐️❤️ Qt5.9专栏定期更新Qt的一些项目Demo 项目与…

恢复调度平台mysql主从同步

修复问题 调度平台两台MySQL从节点存在Slave_SQL_Running异常&#xff0c;需要恢复。 部署步骤 一、先停止调度平台core服务与web服务&#xff0c;否则无法正常锁表 1.1停止调度平台core服务 2.1停止web服务 3.确认MySQL所有执行线程是否都已经停止 show processlist; 如…

小红书流量规则是什么,推荐机制解读

当今的互联网自媒体世界&#xff0c;说到底还是一个流量时代&#xff0c;一个流量为王的时代。不管你在小红书也好&#xff0c;还是其他自媒体平台都需要知晓平台的流量规则。今天和大家分享下小红书流量规则是什么&#xff0c;让我们一起通过流量规则分析小红书机制和算法。 一…

人工智能如何助力建筑设计自动化?

ChatGPT和DALL-E等工具使用大规模机器学习(ML)模型&#xff0c;并访问大量有标记和有意义的数据&#xff0c;以对文本和图像中的查询提供有见解的响应。但是&#xff0c;一些行业对训练ML模型的数据集的访问有限&#xff0c;这使得使用生成式AI来解决现实世界问题的好处很难获得…

书写我的人生回忆录-这应该是给父母最好的礼物

作为一个业余的软件开发爱好者&#xff0c;我又捣鼓了一个有意思的小东西 &#xff0c;使用完全免费哈 《书写我的人生回忆录》是一款软件&#xff0c;其中包含70个问题&#xff0c;涵盖了父母的个人喜好、家庭、工作、人生经历和态度等方面。通过回答这些问题&#xff0c;您的…

爬虫请求头Content-Length的计算方法

重点&#xff1a;使用node.js 环境计算&#xff0c;同时要让计算的数据通过JSON.stringify从对象变成string。 1. Blob size var str 中国 new Blob([str]).size // 6 2、Buffer.byteLength # node > var str 中国 undefined > Buffer.byteLength(str, utf8) 6 原文…