登录  /  注册
首页 > web前端 > js教程 > 正文

一起来聊聊JavaScript的事件委托、判断URL是否合法及全排列

WBOY
发布: 2022-11-16 15:56:32
转载
1435人浏览过

本篇文章给大家带来了关于javascript的相关知识,其中主要介绍了事件委托、判断url是否合法以及全排列的相关内容,下面一起来看一下,希望对大家有帮助。

一起来聊聊JavaScript的事件委托、判断URL是否合法及全排列

【相关推荐:JavaScript视频教程web前端

1、事件委托

效果演示

在这里插入图片描述

要求

补全JavaScript代码,要求如下:

  • 给"ul"标签添加点击事件

  • 当点击某"li"标签时,该标签内容拼接".“符号。如:某"li"标签被点击时,该标签内容为”.."

手撕代码

nbsp;html>
    <meta>
    <meta>
    <meta>
    <title>事件委托</title>
    
登录后复制
            
  • .
  •         
  • .
  •         
  • .
  •     
    <script> // 补全代码 const ul = document.getElementsByTagName(&#39;ul&#39;)[0] ul.onclick = function (e) { const tar = (e || window.event).target // 如果点击的对象的名称是li // localName 获取标签名 if (tar.localName === &#39;li&#39;) { tar.innerHTML = tar.innerHTML + &#39;.&#39; } } </script>

这道题挺简单的,事件委托的原理实际就是利用了事件冒泡的机制。

事件冒泡:在一个对象上触发某类事件(比如单击click事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件就会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层次的最顶层,即document对象(有些浏览器)

在实际开发中,使用事件委托统一由父类捕捉并处理事件,这样可以减少子类事件的重复定义。

2、判断URL是否合法

要求

补全JavaScript代码,要求以Boolean的形式返回字符串参数是否为合法的URL格式。

注意:协议仅为HTTP(S)

手撕代码

const _isUrl = url =&gt; {
    // 补全代码
    let reg = /^((https|http):\/\/)?(([A-Za-z0-9]+-[A-Za-z0-9]+|[A-Za-z0-9]+)\.)+([A-Za-z]{2,6})(:\d+)?(\/.*)?(\?.*)?(#.*)?$/g;
    return reg.test(url)}
登录后复制

这题就是考察了正则的应用,运用了大量的正则知识,包括:

  • ^代表开头

  • [A-Za-z0-9]表示匹配大小写字母和数字

  • \/表示匹配/,因为在正则里/有其它含义,所以要匹配/需要在前面使用\对其进行转义

  • ? 等价于{0,1},表示出现一次或者不出现

  • +表示出现的次数至少为1

  • |(管道符),是的意思,表示匹配|两边内容的其中任何之一

  • \.表示匹配.,与/一样,要匹配.需要在前面使用\对其进行转义

  • {n,m} 表示出现n-m次

  • \d匹配数字

  • .就是[^\n\r\u2028\u2029],是通配符,表示几乎任意字符

  • *表示出现次数为0次或者多次

  • .*就是匹配任何多个任意字符

  • $代表结尾

  • g代表全局匹配

合法的URL格式如下:

  • 协议部分http(s)可选: 表示为((https|http):\/\/)?

  • 域名部分 :表示为(([A-Za-z0-9]+-[A-Za-z0-9]+|[A-Za-z0-9]+)\.)+

  • 顶级域名,如comcn等为2-6位:表示为([a-zA-Z]{2,6})

  • 端口部分:表示为(:\d+)?

  • 请求路径如/login:表示为 (\/.*)?

  • 问号传参及哈希值如?age=1#dom:表示为 (\?.*)?(#.*)?

3、全排列

要求

补全JavaScript代码,要求以数组的形式返回字符串参数的所有排列组合。
注意:

  • 字符串参数中的字符无重复且仅包含小写字母

  • 返回的排列组合数组不区分顺序

示例:

输入:_permute('abc')
输出:['abc','acb','bac','bca','cab','cba']
登录后复制

手撕代码

全排列是比较常见的算法之一,解法有很多,这里给大家提供一个很巧妙的解法:

const _permute = string =&gt; {
    // 补全代
    const res = []; // 结果数组
    function search(str) {
    	console.log('1', 'str=' + str);
    	// 如果长度相等了就存放到结果数组中
        if (str.length === string.length) {
            res.push(str)
        }
        // 遍历string
        for (let char of string) {
        	console.log('2', 'str=' + str, 'char=' + char);
        	// 如果str内不含char,就使用str+char开始递归
            if (str.indexOf(char) <p>整体思路就是运用循环加递归,但这个过程中涉及到了<code>JavaScript</code>中循环的执行机制,我们以执行<code>console.log(_permute('ab'));</code>为例查看控制台打印结果:</p><p><img src="https://img.php.cn/upload/article/000/000/067/66e36e8cc39d1c0f975c61596092ab88-3.png" alt="在这里插入图片描述"></p><p><code>search</code>函数中的<code>for</code>循环执行次数与<code>string</code>参数的长度相等,此时传递的<code>string</code>参数为<code>ab</code>,长度为2,即<code>search</code>函数中的<code>for</code>循环会执行两次。</p><p><strong>这里需要注意的就是:<code>for</code>循环中执行的递归(再次调用<code>search</code>函数)并不会中断当前的<code>for</code>循环,只会将还未执行的循环暂且搁置,等到系统空闲时这些搁置的循环才会开始执行</strong>( <code>javascript</code> 引擎在同一时刻只能处理一个任务,即<strong>单线程</strong>),具体过程见下方图解:</p><p><img src="https://img.php.cn/upload/article/000/000/067/6cdcbaa13171acb1aed4f70f827454d2-4.png" alt="在这里插入图片描述"></p><p>【相关推荐:<a href="https://www.php.cn/course/list/17.html" target="_blank" textvalue="javascript视频教程">JavaScript视频教程</a>、<a href="https://www.php.cn/course/list/1.html" target="_blank">web前端</a>】</p>
登录后复制

以上就是一起来聊聊JavaScript的事件委托、判断URL是否合法及全排列的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号