js-事件、正则表达式

AddEventListener()之中有三个参数,分别是(1)事件的名称(注:不要加on,例:click才是点击事件的名称)(2)需要执行的function(){} (3)布尔类型(false表示的是事件冒泡开启,true表示的是事件捕获开启)

EventTarget.prototype.addEventListener = function(type,listener,useCapture) {};
/**
@param {string} type
@param {EventListener|Function} listener
@param {boolean} [useCapture = false]
*/

封装添加事件的兼容性:

function addEventListener(element, type, listener) {
    //能力检测
    if(element.addEventListener) { //谷歌、火狐支持
        element.addEventListener(type, listener, false);
    }else if(element.attachEvent) { //ie浏览器
        element.attachEvent("on" + type, listener);
    }else{                //  element.onclick=function(){}
        element["on" + type] = listener;
    }
}

封装移出事件的兼容性:

function removeEventListener(element,type,listener){
    if(element.removeEventListener){
        element.removeEventListener(type,listener,false);//谷歌火狐之中移除事件的方式
    }else if(element.detachEvent){
        element.detachEvent("on"+type,listener);//ie中移除事件的方式
    }else{
        element["on"+type]=null;//element.onclick=function(){}移除事件的方式,此处为何不能写成element.+”on”+type的形式,因为type是一个变量,对象的属性是变量时只能写在[]之中。
    }
}

事件的添加与移除

添加:

<input type="button" value="按钮" id="btn"/>
<script>
    var btn=document.getElementById("btn");
        function test(){
               alert("233");
        }
    //使用addEventListener添加一个点击事件
    btn.addEventListener("click",test,false);
</script>

添加并移除:

<script>
    var btn=document.getElementById("btn");
    //    //移除事件:当test命名函数被调用三次之后,移除点击事件
    var num=0;
    function test(){
        num++;
        alert("233");
        if(num==3){
            btn.removeEventListener("click",test,false);
        }

    }
    btn.addEventListener("click",test,false);
</script>

补充:我们在注册事件的时候需要考虑到注册事件的性能问题:

举个例子:给下面每一个li注册一个点击事件:

<ul id=”ul”>

<li>123</li>

<li>234</li>

<li>456</li>

<li>567</li>

</ul>

var ul = document.getElementById("ul");
//第一种方式
for(var i = 0, length = ul.children.length; i < length; i++) {
    var li = ul.children[i];

    li.onclick = function(){//此处可以看出每次都要注册运行一个匿名函数
console.log(this.innerText);

};
}

//第二种方式
for(var i = 0, length = ul.children.length; i < length; i++) {
    var li = ul.children[i];

    li.onclick = test; //而运用命名函数的方式则能大大提高程序的运行                                 //效率
}

function test() {
    console.log(this.innerText);
}

事件冒泡:

---事件委托(好处):举个例子吧我们现在的要求还是给每个li注册一个点击事件,此时我们可能会想到要给每一个li遍历注册事件,但是我们还有一种更加简单的方法那就是通过事件冒泡的方式委托给它的ul标签,对它进行事件注册

<ul id=”ul”>

<li>123</li>

<li>234</li>

<li>456</li>

<li>567</li>

</ul>

 var ul = document.getElementById("ul");
        ul.addEventListener("click", function (e) {
              alert(e.target.innerText);//e.target表示的是当前触//发事件的元素
        }, false);

当然有好处便有坏处,举个例子我们在页面之中需要通过一个a标签来点击弹出一个窗口,假设a标签的id是link,窗口盒子的的id为box,  $$(“”)表示获取页面元素的id

$$(“link”).onclick=function(e){

$$(“box”).style.display=”block”;

e.stopPropagation();

}

这样点击a标签之后,盒子就显示出来了,但是我们还需要在单击页面空白之处隐藏盒子。因此就有了

Document.onclick=function(){

$$(“box”).style.display=”none”;}

那么问题就来了:我们会发现第一段之中的显示盒子代码不起效果,为什么呢?原因就在于事件冒泡,a标签处于document之中,第二段代码让盒子不显示,覆盖了a标签显示功能的执行。解决办法就是在第一段代码之中加入e.stopPropagation();以阻止事件冒泡

事件捕获:在文章开头我们讲到AddEventListener()之中有三个参数,其中最后一个参数是布尔类型的true/false.

在这里代表事件捕获的就是true.它与事件冒泡的顺序正好相反,若是发生盒子嵌套的话冒泡是由内而外显示,捕获是由外向内显示元素。

e.target的相关属性:

Box3是蓝色盒子,box2是绿色盒子,box1是红色盒子

上图console之中显示的为单机box3盒子时所触发的。

var elements=[box1,box2,box3];
    for(var i= 0,length=elements.length;i<length;i++){
        var element=elements[i];
//        element.addEventListener("click",test,false);
        element.addEventListener("mousedown",test,false);
    }
    function test(e){
        e=e||window.event;
        console.log("target:"+e.target.id);//target始终是点击的元素
        console.log("currentTarget:"+ e.currentTarget.id);//currentTarget是冒泡的的元素
        console.log("this:"+this.id);//与currentTarget保持一样
}
//除了在冒泡事件中,trget与currentTarget显示的内容是一样的。

正则表达式:

一、webstorm中按“ctrl+F”键打开,勾选Regex(正则表达式),match case(匹配大小写)

按“ctrl+R” 替换

//正则表达式的作用

1.匹配

2.获取

3.替换

//

二、常用的正则表达式规则

//2.1 元字符

//.   匹配任何单个字符,除了换行

//\d  数字   \D 非数字

//\w  数字 字母 下划线   \W 非

//\s  空白   \S 非空白

//\n  换行

//\t  制表符

//2.2  范围-- 匹配的是一个字符  ABCD

// [0-9]  [0123]  [a-z]  [A-Z]  匹配的是一个字符

//2.3  | 或者   \w|\d

//2.4  量词  -只修饰一个字符

//a+  1个或多个a

//a?  1个或0个a

//a*  0个或多个a

//var str = "aabbccddeeff";

//var regRex = /aa*b/;

//console.log(regRex.test(str));

//2.4  量词  -只修饰一个字符

//a{x}  x个n

//a{x,} 至少x个a

//a{x,y}  x-y个a

//2.5 开始结束

//^a  以a开始

//a$  以a结束

//2.6 () 看成一个整体

//2.7 匹配汉字

// [\u4e00-\u9fa5]

//    var str = "中华人民共和国";

//    var regRex = /[\u4e00-\u9fa5]{7}/;

//    console.log(regRex.test(str));

//2.8 参数

//i  忽略大小写

//g  全局匹配

在javascript之中创建正则表达式对象的两种写法:

下面这段代码也是利用正则表达式进行字符串的匹配判断:

输出的内容为true/false

<script>
//    第一种写法
//    var regularExpression=new RegExp("\\d+");
//    var str="abc";
//    console.log(regularExpression.test(str));
//第二种写法
    var regularExpression=/a?/;
    var str="abc";
    console.log(regularExpression.test(str));
</script>

在javascript之中正则表达式的提取:

举个例子:

var str="张三: 1000,李四:5000,王五:8000。";
var reg=/\d+/g;
var arr=str.match(reg);
console.log(arr);

将提取到的数字转换成数组的形式输出,/  /g====g表示的是global全局。

match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。

该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。

stringObject.match(searchvalue)

stringObject.match(regexp)


参数


描述


searchvalue


必需。规定要检索的字符串值。


regexp


必需。规定要匹配的模式的 RegExp 对象。如果该参数不是 RegExp 对象,则需要首先把它传递给 RegExp 构造函数,将其转换为 RegExp 对象。

<
时间: 2024-10-11 09:59:44

js-事件、正则表达式的相关文章

js常用正则表达式2

字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界. -或- 对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"\"后,/a\*/将只匹配"a*". ^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a&quo

js事件冒泡和事件委托

js所谓的事件冒泡就是子级元素的某个事件被触发,它的上级元素的该事件也被递归执行 html: 1 <ul class="clearfix" data-type="cityPick"> 2 <li class="active_sort_opts" data-id="0">全部</li> 3 <li data-id="88">纽约</li> 4 <

特殊js事件

1:点击enter事件 $(document).keypress(function(e) { // 回车键事件 if(e.which == 13) { submitForm(); } }); 2:JQUERY表单ajax提交事件 1):添加js插件 2):添加js事件 function submitForm(){ $.ajax({ url:'${root}/doLogin', data:$('form').serialize(), dataType:'json', cache:false, ty

JS事件(事件冒泡和事件捕获)

事件流:描述的是在页面中接收事件的顺序 事件冒泡:由最具体的元素接收,然后逐级向上传播至最不具体的元素的节点(文档) 事件捕获:最不具体的节点先接收事件,而最具体的节点应该是最后接收事件 DOM中:用于处理指定和删除事件处理程序的操作addEventListener()和removeEventListener().他们都接收三个参数:要处理的事件名.作为事件处理程序的函数和布尔值(事件处理的时候)[true:事件捕获时;false:事件冒泡时] DOM中的事件对象: type属性 用于获取事件类

略谈js事件

 本人是这样从做学的js事件分成以下三个方面: 第一部分:浏览器的按键事件 用js实现键盘记录,要关注浏览器的三种按键事件类型,即keydown,keypress和keyup,它们分别对应onkeydown. onkeypress和onkeyup这三个事件句柄.一个典型的按键会产生所有这三种事件,依次是keydown,keypress,然后是按键释放时候的keyup. 在这3种事件类型中,keydown和keyup比较底层,而keypress比较高级.这里所谓的高级是指,当用户按下shift +

js事件的三个阶段

js事件的三个阶段分别为:捕获.目标.冒泡 1.捕获:事件由页面元素接收,逐级向下,到具体的元素 2.目标:具体的元素本身 3.冒泡:跟捕获相反,具体元素本身,逐级向上,到页面元素 IE5.5:div---body---document IE6.0:   div---body---html---document Mozilla:div---body---html---document---window 事件捕获:当使用事件捕获时,父级元素先触发,子元素后触发 事件冒泡:当使用事件冒泡时,子级元素

JS中的函数、Bom、DOM及JS事件

本期博主给大家带来JS的函数.Bom.DOM操作,以及JS各种常用的数据类型的相关知识,同时,这也是JavaScript极其重要的部分,博主将详细介绍各种属性的用法和方法. 一.JS中的函数 [函数的声明及调用] 1.函数声明的格式: function 函数名(参数1,参数2,参数3,--){//函数体 return 结果; } >>>函数的调用格式: 直接调用:函数调用的格式:函数名(参数一的值,参数二的值,--): 事件调用:事件名=函数名( ); 2.函数声明的几点强调: ①函数名

js事件对象坐标

js事件对象坐标---贴上代码 <body style="position:relative;width:100%;height:100%;padding:15px;margin:20px;"> <div style="position:absolute;top:100px;left:100px;width:500px;height:500px;padding:5px;margin:9px;background:#ddd;" onclick=&qu

JS的Touch事件们,触屏时的js事件

丫的,终于找到了JS在平板电脑上的事件!!! iphone.ipod Touch.ipad触屏时的js事件 1.Touch事件简介 pc上的web页面鼠标会产生onmousedown.onmouseup.onmouseout.onmouseover.onmousemove的事件,但是在移动终端如iphone.ipod Touch.ipad上的web页面触屏时会产生ontouchstart.ontouchmove.ontouchend.ontouchcancel事件,分别对应了触屏开始.拖拽及完成

Js事件大全

一般事件 事件 浏览器支持 描述  onClick IE3|N2|O3 鼠标点击事件,多用在某个对象控制的范围内的鼠标点击  onDblClick IE4|N4|O 鼠标双击事件  onMouseDown IE4|N4|O 鼠标上的按钮被按下了  onMouseUp IE4|N4|O 鼠标按下后,松开时激发的事件  onMouseOver IE3|N2|O3 当鼠标移动到某对象范围的上方时触发的事件  onMouseMove IE4|N4|O 鼠标移动时触发的事件  onMouseOut IE4