js笔记(六)事件、正则

数组方法、字符串方法总结

大标题小节
一、事件1.1 事件;
1.2 事件对象;
1.3 键盘事件的keyCode;
1.4 关于鼠标的尺寸;
1.5 事件冒泡;
1.6 事件的默认行为;
1.7 事件监听;
1.8 事件委托(事件代理)
二、正则-字符串的方法2.1 普通字符;
2.2 修饰符;
2.3 特殊字符(元字符);
2.4 量词(限定词);
2.5 正则验证

一、事件

1.1 事件

(1)鼠标事件onclickondbclickonmousedown按下、onmouseup抬起、onmouseover进入、onmouseout离开、oncotentmenu右键单击

(2)键盘事件onkeypress按下并抬起、onkeydown按下、onkeyup抬起
onkeypress = onkeydown + onkeyup;

(3)浏览器事件onload页面或图片加载

(4)表单控件中onfocusonbluronchange文本域边写边触发(改变文本域的内容)、onsubmitonreset

1.2 事件对象

事件对象:用来记录发生事件时有关该事件的信息。每次事件发生时,会在函数或方法内部产生一个事件对象,这个事件对象就event

(1)特点:
① 只有在事件发生的时候,才会产生事件对象,无法手动创建,并且事件对象只能在处理函数内部访问。
② 处理函数运行结束后该对象自动销毁。
③ event 需要逐层传递,不要忽略外部的function

(2)获取方式:
① 拿事件对象: window.event 事件对象的 window 不能省略,同时也是 ie 浏览器的兼容处理;
② 直接传参:

  • 单个参数:function(eve){ var e = eve || window.event;}
  • 多个参数:onclick = "(eve)=>{fn(eve,other)}"

1.3 键盘事件的 keyCode

(1)参照表
在这里插入图片描述
在这里插入图片描述

(2)特殊按键:

  • ctrlKey(判断是否按下 Ctrl 键,若按下返回 true,否则返回false)、shiftKeyaltKey`
    注意: 当按下 alt 键后,无法再按下其他键,因为 alt 键系统给了它快捷键的定义,所以要再按一下 alt 键取消,或者鼠标点击一下页面。
  • e.button,检测鼠标按键
    左键单击:返回 0 ; 按住鼠标中间:返回1; 右键单击: 返回2

(3)兼容处理:

var e = eve || window.event;
var keyC = e.keyCode || e.which;

1.4 关于鼠标的尺寸

<style>*{margin:0;padding:0}body{height: 600;}.box{width: 200px;height: 150px;background:#99f;padding:10px 20px;margin:5px 10px;border:20px solid #000;position: absolute;top:30px; left: 50px;}
</style>
<body><div class="box">width:200px;height:150px;<br/>padding:10px 20px;<br/>margin:5px 10px;<br/>border:20px solid #000;<br/>top:30px; left: 50px;</div>
</body>

在这里插入图片描述

(1)offsetXoffsetY 相对于事件源(当前元素)的位置;

<script>var obox = document.querySelector(".box");obox.onclick = function(eve){var e = eve || window.event;console.log("e.offsetX", e.offsetX);console.log("e.offsetY", e.offsetY);}
</script>

在这里插入图片描述

  • 可以看到,offset系列是 事件源 到上、左边框的距离(不包括上、左边框的距离,但是 右、下边框会被加上去)。
  • 在这里插入图片描述

(2)clientXclientY 相对于浏览器的位置;

console.log("e.clientX", e.clientX);
console.log("e.clientY", e.clientY);

在这里插入图片描述

  • 要注意一下,当有滚动条时,距离不会加上滚动条的距离(即忽略是否滚动),距离仍然是 事件源 到浏览器 顶部/左边 的距离。

(3)pageXpageY 相对于页面的位置。
client系列和page系列的区别在于是否有滚动条,没有滚动条时,两者的值是一致的;而有滚动条时,page系列的值还需要加上滚动条距离页面顶部位置的距离;

(4)screenXscreenY 相对于显示器(电脑)的位置;
在这里插入图片描述

1.5 事件冒泡

(1)事件流: 事件执行的顺序;
(2)当触发子元素的某一个事件时,会依次向上触发父元素的所有相同事件。
(3)阻止事件冒泡:

var e = eve || window.event;
function stopBubble(e){if(e.stopPropagation){e.stopPropagation();} else {e.cancelBubble = true; //兼容ie}
}

1.6 事件的默认行为:

浏览器自己触发的事件就是默认行为。

function stopDefault(e){if( e.preventDefault ){e.preventDefault();} else {e.returnValue = false;}
}
  • 阻止按下选中文字。a 标签的 href ,表单的 提交跳转,鼠标右键出现菜单,按下选中文字,都是默认行为。

    document.onmousedown = function(eve){var e = eve || window.event;if( e.preventDefault ){e.preventDefault();} else {e.returnValue = false;}
    }
    
  • 阻止用户用 F12 打开控制台:

    document.onkeydow = function(eve){var e = eve || window.event;var code = e.keyCode || e.which;if(code == 123){if( e.preventDefault ){e.preventDefault();} else {e.returnValue = false;}}
    }
    

1.7 事件监听

对同一个元素要做相同事件,但是逻辑不同。这种方式写的事件也称为 “DOM2级事件”。

(1)绑定方法: addEventListener()attachEvent()

使用方法元素.addEventListener();元素.attachEvent();
兼容的浏览器正常浏览器中使用;ie浏览器中使用;
第一个参数不带 on 的事件;带 on 的事件;
第二个参数回调函数;回调函数;
第三个参数决定事件流的状态。 false 事件冒泡(默认),true 事件捕获;

冒泡: 从里到外;
捕获: 从外到里,与冒泡相反,元素.addEventListener();第三个参数为true时就会触发。

//DOM0级事件,方便且无兼容,但是不能重复给同一个DOM添加事件,否则后写的会覆盖先写的事件
obox.onclick = function(){console.log(1);
};//DOM2级事件,可以给同一个DOM添加多个相同事件,且不影响事件中的逻辑
obox.addEventListener("click",function(){console.log(1);
});
obox.addEventListener("click",function(){console.log(2);
})

(2)解除绑定(清除事件): removeEventListener()detachEvent

//DOM0级清除事件,直接覆盖
obox.onclick = null;//DOM2级清除事件
obox.addEventListener("click",fn);
fn(){console.log(1);
}
obox.removeEventListener("clik",fn);//正常浏览器
obox.detachEvent("click",fn);//ie浏览器

(3)兼容处理

if(obox.addEventListener){obox.addEventListener("click",fn)
} else if(obox.attachEvent){obox.attachEvent("onclik",fn)
} else {obox.onclick = fn;
}
function fn(){console.log(1);
}
  • 封装添加:
    function addEvent(ele,type,callback){if(ele.addEventListener){ele.addEventListener(type,callback,false);} else if(ele.attachEvent){ele.attachEvent("on"+type,callback);} else {ele["on"+type] = callback;}
    }addEvent(obox,"click",function(){console.log(1);
    })//或者
    addEvent(obox,"click",fn)
    
  • 封装删除:
    function removeEvent(ele,type,callback){if(ele.removeEventListener){ele.removeEventListener(type,callback,false);} else if(ele.detachEvent){ele.detachEvent("on"+type,callback):} else {ele["on"+type] = null;}
    }removeEvent(obox,"click",fn);
    

1.8 事件委托 e.target

利用事件冒泡,把多个子元素的相同事件,委托给一个共有的父元素。
配合事件对象的事件源(target)属性,找到当前元素。
target: 事件源

oul.onclick = function(eve){var e = eve || windwo.event;var target = e.target || e.srcElement; //e.srcElement是ie浏览器上的if(target.nodeName == "LI"){ //选择出要做操作的子元素console.log(target)}
}


二、正则-用来验证字符串

1. 描述: 正则表达式是一个描述字符规则的对象。正则是用来验证字符串的。
2. 使用
(1)可以用来检查一个字符串中是否含有某个字符
(2)将匹配的字符做替换,或者从某个字符中取出某个条件的字串等。

  • 字符串.match(正则表达式) 将符合条件的字符或字符串提取出来,返回一个数组
  • 字符串.replace(正则表达式,newStr): 替换,返回替换之后的字符串
  • 正则表达式.test(字符串): 验证字符串是否符合规则,返回布尔值;>>

3. 正则创建方式:
(1)字面量方式:var reg = /a/;
(2)构造函数方式:var reg = new RegExp("a");
4. 删除空格
(1)删除多余空格:str.replace(/\s+/g,'');
(2)删除首尾空格
str.replace(/^\s+/,'');
str.replace(/\s+$/,'');

正则表达式

  • /goo/g/[goo]/g 的区别。
    我们可以把 / / 看做是一个循环,内部的表达式当做循环体。
    前者 goo 表示循环字符串,匹配字符串中的子字符串goo
    后者[goo]表示循环字符串,匹配字符串中的字符goo
    var str = "Google runoob TaoBao";
    var n = str.replace(/goo/g,"啊");
    var n1 = str.replace(/[goo]/g,"啊");
    console.log(n,n1)var m = str.match(/goo/g);
    var m1 = str.match(/[goo]/g);
    console.log(m,m1)
    
    在这里插入图片描述
  • /13|2/g/[13|2]/g 的区别。
    前者 13|2 表示循环字符串,匹配字符串中的子字符串13或者2
    后者[13|2]表示循环字符串,匹配字符串中的字符13,或者2,等价于[132]
    var str = "1dlksj2 dj13lska de2";
    var n = str.replace(/13|2/g,"啊");
    var n1 = str.replace(/[13|2]/g,"啊");
    console.log(n);
    console.log(n1);
    
    在这里插入图片描述

2.1 普通字符

普通字符包括所有 大写和小写字母、所有数字、所有标点符号和一些其他符号

字符描述举例
[各种字符数字符号]匹配 [...] 中的所有字符。/[aeou]/g 表示匹配字符串 “google runoob taobao” 中所有的字母 eoua
[^各种字符数字符号]匹配除了 [...] 中字符的所有字符。/[^aeou]/g 匹配字符串 “google runoob taobao” 中除了 e o u a 字母的所有字母。
[A-Z][A-Z] 表示一个区间,匹配所有大写字母,[a-z] 表示所有小写字母
[\s\S]匹配所有。\s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行[^\s][\S] 效果相同。
[A-Za-z0-9_]匹配字母、数字、下划线。等价于 \w\W,非数字字母下划线。
[0-9]匹配数字。等价于 \d\D,除了数字。
var str = "djaaAaN$AN23hAa&a23Andgbndn^c_";
//不区分大小写,将"an"、"bn"、"dn"替换成"啊"
console.log(str.replace(/an|bn|dn/gi,"啊"));//djaaA啊$啊23hAa&a23啊dg啊啊^c_
console.log(str.replace(/[a|b|d]n/gi,"啊"));//djaaA啊$啊23hAa&a23啊dg啊啊^c_//将所有字母替换成“啊”
console.log(str.replace(/[a-z]/gi,"啊"));//啊啊啊啊啊啊啊$啊啊23啊啊啊&啊23啊啊啊啊啊啊啊啊^啊_
console.log(str.replace(/[a-z]+/gi,"啊"));//啊$啊23啊&啊23啊^啊_//将数字字母下划线替换成一个“啊”
console.log(str.replace(/\w+/g,"啊"));//啊$啊&啊^啊//替换特殊字符(包括_)
console.log(str.replace(/[^\da-zA-Z]/g,"啊"));//djaaAaN啊AN23hAa啊a23Andgbndn啊c啊//替换特殊字符(不包括_)
console.log(str.replace(/[^\da-zA-Z_]/g,"啊"));//djaaAaN啊AN23hAa啊a23Andgbndn啊c_
console.log(str.replace(/[\W]/g,"啊"));//djaaAaN啊AN23hAa啊a23Andgbndn啊c_

2.2 修饰符

字符描述举例
g全局匹配。/[aeou]/g 表示匹配字符串 “google runoob taobao” 中所有的字母 eoua
i忽略大小写。/[aeou]/gi 表示匹配字符串 “Google runoob TaoBao” 中所有的字母 eoua,不区分a e o u的大小写,返回小写
m多行匹配。/^runoob/gm匹配字符串"runoobgoogle\ntaobao\nrunoobweibo",返回["runoob", "runoob"]
s默认情况下的圆点 . 是 匹配除换行符 \n 之外的任何字符,加上 s 之后,. 中包含换行符 \n
var str = "afkgigGRhaagal45geAGK34DGOEN13";console.log(str.replace(/a/,"啊"));//啊fkgigGRhaagal45geAGK34DGOEN13
//全局替换 将"a"替换成"啊" 
console.log(str.replace(/a/g,"啊"));//啊fkgigGRh啊啊g啊l45geAGK34DGOEN13//忽略大小写
console.log(str.replace(/a/gi,"啊"));//啊fkgigGRh啊啊g啊l45ge啊GK34DGOEN13

2.3 特殊字符(元字符)

特殊字符,就是一些有特殊含义的字符,也叫“元字符”。

  • 若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符 \ 放在它们前面。
字符描述举例
^匹配输入字符串的开始位置。若在[^其他]中,则表示“”。/^/
$匹配输入字符串的结束位置。
\将下一个字符标记为一个特殊字符。例如,‘n’ 匹配字符 “n”。’\n’ 匹配一个换行符。
|或。| 的作用范围是 | 两边所有的规则,而不是与 | 相邻的两个字母、数字、特殊字符等,如果只作用一部分,要加 “()/x|y/g匹配 xy/z|food/g 能匹配 zfood/(z|f)ood/g 则匹配 zoodfood
\b匹配一个单词边界,也就是指单词和空格间的位置。/er\b/g 可以匹配never 中的er,但不能匹配verb中的er
\B匹配非单词边界。/er\B/g 能匹配 verb 中的 er,但不能匹配 never 中的er
\d匹配一个数字字符。等价于 [0-9]
\D匹配一个非数字字符。等价于 [^0-9]
\n匹配一个换行符。等价于 \x0a\cJ
\s匹配任何空白字符,包括空格、制表符、换页符等等。
\S匹配任何非空白字符。
\w匹配字母、数字、下划线。等价于[A-Za-z0-9_]
\W匹配非字母、数字、下划线。等价于[^A-Za-z0-9_]

2.4 量词(限定符)

限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。

字符描述举例(这些量词都表示它前面的 一个字符匹配次数。.除外 )
?0次或一次;do(es)? 可以匹配 dodoes? 等价于 {0,1}
*0次或多次(即可有可无);
+一个或一个以上;
{n}确定的 n 次;
{n,m}n-m,至少 n 次,至多 m 次;
{n,}至少n次;
.通配,所有;
var str = "djaaAaNAN23hAaa23Andgbndnc";
//不区分大小写,将连续的“a”替换成一个“啊”
console.log(str.replace(/a+/gi,"啊"));//dj啊N啊N23h啊23啊ndgbndnc
console.log(str.replace(/./g,"啊"));//啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊

2.5 正则验证

假设我要验证一个简单邮箱:hexiling@123.com(前7位是英文,@,3位数字,3个英文):

  • 我直接写:var reg = /[a-z]{6}@\d{3}\.[a-z]{3}/;,这样验证的是字符串中的某一部分,如果某一部分满足正则规则,则test()返回true
  • 我们要验证的是整个字符串,所以需要 ^$,表示从字符串开头验证到字符串结尾,即var reg = /^[a-z]{6}@\d{3}\.[a-z]{3}&/;

很大一部分正则验证(即需要使用test()方法的),都需要^$

  • /<[^<>]+>]/,匹配HTML标签;

上一篇 下一篇

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

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

相关文章

神州泰岳2050万元收买并增资奇点国际

网易科技讯 3月7日消息&#xff0c;神州泰岳来日诰日颁布发表关照公告&#xff0c;将经由股权让渡体例共付出1450万元股权让渡款获得奇点国际100%股权&#xff0c;同时神州泰岳与邵起明分别出资600万元、200万元对奇点国际举行增资。本次增资后&#xff0c;奇点国际注册资金增进…

拯救你丢失的精度——BigInteger和BigDecimal类(入门)

第三阶段 JAVA常见对象的学习 BigInteger和BigDecimal类 BigInteger类 (一) 构造方法&#xff1a; //针对超过整数范围的运算(整数最大值&#xff1a;2147483647) BigInteger(String val) (二) 常用方法&#xff1a; //加 public BigInteger add(BigInteger val) //减 public…

vue笔记(四)注册组件,路由,vuex

官网 一、项目中的组件注册 二、路由 三、vuex 一、项目中的组件注册 1. 全局 import Loading from /components/loading;//封装的loading组件 Vue.component(Loading,Loading);2. 局部 <loading/>important loading from ./components/loadingcomponents:{loading}二…

#102030:在30天内运行20 10K,庆祝Java 20年

1995年5月23日是技术史上的重要时刻。 业界似乎并没有意识到当天发布的语言会在未来几年内完全改变技术的格局。 Java将在今年的同一天庆祝20岁生日。 Java 20年&#xff0c;哇&#xff01; 回顾20年前的存储器时代&#xff0c;思考一下Java的发明时间/方式。 万维网专用于精…

vue笔记(一)基本使用、数据检测

vue 官网 Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。 一、基本使用 二、数据检测 一、Vue的思想 MVC【参考 nd的博客园】&#xff1a; 名称描述M&#xff08;…

js笔记(二)数组、对象、this

大标题小节一、数组1. 数组的创建、赋值、分类&#xff1b;2. 数组的简单操作&#xff08;根据索引增、查、改&#xff09;&#xff1b;3. 声明式和构造函数创建的数组的区别&#xff1b;4.数组的方法&#xff1a;push()、unshift()、splice()、pop()、shift()、slice()、sort(…

js笔记(四)内置对象Math和Date()、浏览器对象模型BOM

大标题小标题备注一、内置对象Math、Date()1. Math 数学对象;2. Date() 日期对象;常用的数学对象&#xff1a;Math.PI、abs(n)、round(n)、random()、floor(n)、ceil(n)、pow(x,y)、sqrt(n)、min(3,4,5,6)、max()、sin(弧度)、cos()、tan()&#xff1b;获取日期&#xff1a;get…

ListView展示SIM信息

首先看一下程序运行后的图片&#xff1a; 在开始写代码之前&#xff0c;看展示下程序的结构&#xff1a; 下面开始代码, 第一步&#xff0c;主程序代码&#xff1a; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundl…

js笔记(五)文档对象模型DOM

大标题小节一、DOM选择器1. id 选择器&#xff1a;getElementById("id名")&#xff1b;2. class 选择器&#xff1a;getElementByClassName("class名")&#xff1b;3. 标签选择器&#xff1a;getElementsByTagName("标签名")&#xff1b;4. name…

Flot画实时曲线

源代码&#xff1a; <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <title>深海的小鱼编制-PLOT</title> <script language"javascript" type"text/javascript" src"…

RHQ指标的WildFly子系统

对于RHQ-Metrics&#xff0c;我已经开始为WildFly 8编写一个子系统&#xff0c;该子系统能够在WildFly内收集指标&#xff0c;然后以固定的时间间隔&#xff08;当前为每分钟&#xff09;将其发送到RHQ-Metrics服务器。 下一张图是该发件人连续运行1.5天时结果的可视化效果的G…

Linux下实现客户端和服务器端的通信

首先&#xff0c;可以将代码复制下来放到U盘里&#xff0c;然后挂载到Linux上 挂载步骤 找到设备->USB->你U盘的名字 挂载成功 访问U盘把代码拷贝到home文件夹下&#xff0c;就可以直接进行编译。 client.c #include <stdio.h> #include <unistd.h>#include…

js笔记(八)ES6

大标题补充描述一、 ES6 中新增的声明方式&#xff1a;let、constvar、let、const之间的区别二、 ES6 字符串扩展1. 子串的识别&#xff1a;includes()、startsWith()、endsWith()&#xff1b;2. 重复字符串&#xff1a;repeat()&#xff1b;3. 字符串补全&#xff1a;padStart…

webpack css打包为一个css

1、安装 npm install extract-text-webpack-plugin --save-dev 2、项目目录&#xff1a; index文件夹下的index.css&#xff1a; body{background-color: #ccc;}.flex-div{display: flex;} index文件夹下的index2.css&#xff1a; p{text-indent: 2em;} index文件夹下的index-l…

javascript深入理解js闭包

闭包&#xff08;closure&#xff09;是Javascript语言的一个难点&#xff0c;也是它的特色&#xff0c;很多高级应用都要依靠闭包实现。 一、变量的作用域 要理解闭包&#xff0c;首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种&#xff1a;全局变量和局…

Codeforces Round #568 (Div. 2) G2. Playlist for Polycarp (hard version)

因为不会打公式&#xff0c;随意就先将就一下&#xff1f; #include<cstdio> #include<algorithm> #include<iostream> #include<cstring> #include<vector> using namespace std; typedef long long LL; const int N55; const int MOD1e97; int…

jQuery实现页面关键词高亮

示例代码&#xff0c;关键位置做了注释&#xff0c;请查看代码&#xff1a; <html><head><title>jQuery实现页面关键词高亮</title><style type"text/css">* {margin: 0;padding: 0;}p {padding: 10px;margin-bottom: 20px;}.highligh…

简而言之,JUnit:测试隔离

作为顾问&#xff0c;我仍然经常遇到程序员&#xff0c;他们对JUnit及其正确用法的理解最多。 这使我有了编写多部分教程的想法&#xff0c;从我的角度解释了要点。 尽管存在一些有关使用该工具进行测试的好书和文章&#xff0c;但是也许可以通过本动手实践的方法来使一两个额…

Apache Camel 2.14中的更多指标

Apache Camel 2.14将于本月晚些时候发布。 由于正在解决某些Apache基础结构问题&#xff0c;因此存在一些问题。 这篇博客文章讨论的是我们添加到此版本中的新功能之一。 感谢Lauri Kimmel捐赠了骆驼指标组件&#xff0c;我们将其与出色的Codehale指标库集成在一起。 因此&am…

移动端网页宽度值(未加meta viewport标签)

移动端网页宽度值&#xff08;未加meta viewport标签&#xff09;: iphone:980px Galaxy&#xff08;盖乐世&#xff09;&#xff1a;980px Nexus&#xff1a;980px blackberry&#xff08;黑莓&#xff09;&#xff1a;980px LG&#xff1a;980px Nokia&#xff1a;980p…