JavaScript日志操作对象实例,开拓相关内容总括

运动端 h5 支出有关内容计算:JavaScript 篇

2016/01/24 · HTML5, JavaScript · 5 评论 · 移动端

本文小编: 伯乐在线 - zhiqiang21 。未经小编许可,幸免转发!
款待参与伯乐在线 专辑撰稿者。

今昔我们来综合应用一下所学知识,来促成一个JavaScript日志操作对象的实例,大家要求的是那多少个文件:

总结

js部分

豆蔻年华、词法结构

1、区分朗朗上口写

2、注意//单行/*多行注释*/

3、字面量(直接量literal)

12//数字

5.8 //小数

"hello"

'hello'

true

/js/gi//正则

null//空

{x:1,y:2}

[1,2,3,4]

4、标示符(变量)和保留字

5、分号能够简轻便单不过可能会产生难点,js会自动补;

var y = x+f

(a+b).toString()

等价于

var y =  x+f(a+b).toString();

二、类型、值和变量

1、原始类型数字、字符串和布尔null空undefined未定义

2、对象类型

3、类ArrayFunction Date RegExpError

4、js解析器中融为风度翩翩体了废品回笼

5、大肆js的值都足以转为布尔值

undefined

null

0

-0

NaN

""都被转变为false

6、包装对象

var s=  "hello";//原始类型(未有章程卡塔 尔(英语:State of Qatar)

s.len = 4;//当调用原始类型的质量或艺术的时候(原始类型是一贯不质量和情势的卡塔 尔(阿拉伯语:قطر‎

//只要援引了字符串的质量或情势,就能调用new String(s)把原始类型,包装成靶子

//未来调用s.len是调用String对象的质量和章程,生机勃勃旦援引甘休,新创造的有时对象会销毁

var n =  s.len;//此时为undefined

alert(n);

//调用字符串布尔数字的属性或措施时,成立的有的时候对象。是包装对象

显示定义包装对象var S = new String("hello")

var s  = "hello";是例外的

7、==和===

8、类型转换

var n = 17;

alert(n.toString(2));//二进制10001

alert(n.toString(8));//021

alert(n.toString(16));  //0x21

alert(n.toString(10));alert(n.toString());

9、toString()valueOf()

var date = new  Date(2011,1,3);

date.valueOf()再次回到皮秒数代表的年月

10、js是动态类型var n = 10;程序运行时期才会分明变量的品类

11、变量功效域

函数成效域和申明提前

函数钦赐义的变量注脚自动提前到函数最上端

12、作用域链scope chain

在不含有函数的函数体内,功能域链有三个指标,第三个是概念函数

参数和一些变量的靶子,第三个是大局对象。

在贰个嵌套函数体内,功用域链上至稀少多个指标。

概念二个函数时,它保存了三个功力域链。调用函数时,它创立三个

新的目标存款和储蓄它的一对变量,并将以此目的加多到保存的老大成效域链

上,同一时间成立多少个新的越来越长的意味函数调用功效域的“链”。对于嵌套函数

历次调用外界函数时,内部函数会重新定义叁回。每一回调用外界函数的时候

功效域链是分裂的。

13、deleteinevalvoid

第五章对象

1、对象的基本操作createsetquery delete testenumerate

2、对象的个性天性可写可枚举可配置(是或不是可去除卡塔 尔(英语:State of Qatar)

3、对象的指标本性

对象的原型prototype

对象的类标识对象类型的字符串

目的的扩张标识是还是不是可增加新属性

//创设对象的两种方法

4、对象直接量

var empty = {};

var point =  {x:0,y:0};

5、new成立对象

var o = new  Object();//空对象和{}相近

var a = new  Array();

6、Object.create()

var o1 =  Object.create({x:1,y:2});//o1世袭自对象原型{x:1,y:2}

var o2 =  Object.create(null);//o2不继续任何性质和艺术

var o3 =  Object.create(Object.prototype);

//空对象和{} new Object()同样

7、属性的操作作为关乎数组的靶子

object.property

object["property"]散列映射字典关联数组

8、继承

js的一连只好从父类获取属性的值,而不能改改原型链

假诺目的book为null或undefined

book.subtitle.length会报错

缓和格局

var len = book && book.subtitle  && book.subtitle.length;

除去属性

delete book.subtitle

检查实验属性inhasOwnPreperty()propertyIsEnumerable()

var o = {x:1};

"x" in o

"toString" in o

hasOwnPreperty();剖断属性是或不是是本身的。继承属性再次回到false

propertyIsEnumerable()唯有是自有品质,并可枚举

获取具有属性

Object.keys()

Object.getOwnPropertyNames()

9、属性getter和setter

var o = {

x: 0,

y: 1,

set r(value) { value = this.r;},

get r() { return this.x + this.y;}

};

x数据属性,r存取器属性

10、属性的表征ecmascript5老的ie不援救如下用法

数量属性的特点:值value可写性writable

可枚举enumerable

可配置configurable

存取器属性天性:getset

可枚举enumerable

可配置configurable

//返回{value:1,writable:true,emunerable:true,configurable:true}

Object.getOwnPropertyDescriptor({x:1},x)

//查不到属性重临undefined

设置属性的特点不能够改进世襲的性质天性

Object.defineProperty()

//设置多如牛毛属性

var o = {};

Object.defineProperty(o,"x",{

value:1,

writable:true,

emunerable:false,

configurable:true

})

//设置只读

Object.defineProperty(o,"x",{writable:false})

改良多个个性个性

Object.defineProperties()

扩展Object.prototype书P137

11、对象的两个属性

prototypeclassextensible attribute

询问对象的原型

ecmascript5中Object.getPrototypeOf(o1)

ecmascript3中o1.constructor.prototype

经过对象直接量或new Object()方式开创的指标

包含二个constructor的脾性,指Object()的构造函数

constructor.prototype才是当真的原型

p.isPrototypeOf(o)检查实验对象p是或不是是o的原型

//获取对象的项目字符串

Object.prototype.toString.call(o1).slice(8,-1)

12、对象的可扩充性

对象是还是不是足以新加属性

Object.preventExtensions()设置对象不可扩展

Object.isExtensible()

Object.seal()除了将对象设置为不可扩大,还将品质设置为不可配置

Object.freeze()

除此而外将对象设置为不可扩张,将品质设置为不可配置,还把品质设置为只读

第8章函数

1、函数调用,方法调用

function t(){ }

t();函数调用this是大局对象严俊方式下是undefined

var o =  {a:function(){}};

o.a()方法调用this是最近调用的靶子

2、构造函数调用

var o = new  Object();var o= new Object;

o世襲自构造函数的prototype属性内部的this是此指标

var r = new  o.m();中的this不是o

3、P184函数的实施用到了意义域链,这么些效应域链是函数定义的时候创制的。

嵌套的函数f()定义在这里个职能域链里,个中的变量scope是部分变量

效果域链

调用s()将创制函数s的推行情形(调用对象),并将该对象放置链表带头,

下一场将函数t的调用对象链接在之后,最终是大局对象。然后从链表先河搜索变量name

调用ss()ss() ==>t()==> window

name="lwy";

function  t(){

var name="tlwy";

function s(){

var  name="slwy";

console.log(name);

}

function ss(){

console.log(name);

}

s();

ss();

}

t();

老是调用函数,都会扭转二个新的功效域链。包涵新的在那之中变量

jQuery是什么?(了解)

www.github.com

jQuery其实正是一群的js函数,是平凡的js,只可是应用普及,产生了产业标准。

参考书:锋利的jQuery

上学参照他事他说加以考察:

官网:

2. jQuery的重点

2.1 jQuery入口函数(全世界都会)

2.2 jQuery的选择器(其实就是CSS的选拔器)

2.3 jQuery的Dom操作

2.4 jQuery的体裁操作

2.5 jQuery的动画

2.6 jQuery的事件管理

3.jQuery的入口函数

3.1语法

jQuery(document).read(function(){ });

$(function(){ });// **

window.onlaod = function(){}

$ === jQuery // $是jQuery全局函数的外号。

3.2注意事项:(重点)**

document ready:是html文书档案希图妥帖,也等于dom树创设完结了。能够张开dom操作了。

*主要的是:html页面下载完毕,并预备妥帖*

window.onload:是整个页面全数的财富都加载成功,图片、js、css等...

3.3文书档案加载顺序:(重点)**

下载html页面,分析html标签,遇到link标签加载css,遇到script加载js..

4. jQuery选项选拔成分

4.1 jQuery选择器

4.1.1 ID接收器(js日常尽量用ID选择器,功效最高卡塔尔(重点)**

$("#id").html();

4.1.2类选用器(重点)**

$(".className").text();

4.1.3标签选用器(重点)**

$('p').click();

4.1.4属性采取器

$("li[id]")、$("li[id='link']").fadeIn();

4.1.5层级选用器(重点)**

$("li .link").show();

4.1.6父亲和儿子选用器

$("ul > li")

4.1.7伪类选取器

$("p:first")

$("ul li:eq(3)")

4.1.8表单采用器

$(":text")

$(":checkbox")

$(":checked")

4.2接受器汇总

*$("*")全部因素

#id$("#lastname")id="lastname"的元素

.class$(".intro")所有class="intro"的元素

element$("p")所有

元素

.class.class$(".intro.demo")所有class="intro"且class="demo"的元素

:first$("p:first")第一个

元素

:last$("p:last")最后一个

元素

:even$("tr:even")全部偶数成分

:odd$("tr:odd")全部奇数成分

:eq(index)$("ul li:eq(3)")列表中的第多少个要素(index从0开头卡塔尔国

:gt(no)$("ul li:gt(3)")列出index大于3的元素greater  than

:lt(no)$("ul li:lt(3)")列出index小于3的元素less  than

:not(selector)$("input:not(:empty)")全部不为空的input成分

:header$(":header")全数题目成分


=====

:animated全数动漫成分

:contains(text)$(":contains('W3School')")包蕴钦定字符串的有所因素

:empty$(":empty")无子(成分卡塔 尔(阿拉伯语:قطر‎节点的具有因素

:hidden$("p:hidden")全体隐瞒的

元素

:visible$("table:visible")全数可以知道的表格

s1,s2,s3$("th,td,.intro")全部带有相称选取的要素

[attribute]$("[href]")全体带有href属性的要素

[attribute=value]$("[href='#']")全部href属性的值等于"#"的元素

[attribute!=value]$("[href!='#']")全体href属性的值不对等"#"的元素

[attribute$=value]$("[href$='.jpg']")全数href属性的值包括以".jpg"结尾的要素

:input$(":input")全部因素

:text$(":text")所有type="text"的元素

:password$(":password")所有type="password"的元素

:radio$(":radio")所有type="radio"的元素

:checkbox$(":checkbox")所有type="checkbox"的元素

:submit$(":submit")所有type="submit"的元素

:reset$(":reset")所有type="reset"的元素

:button$(":button")所有type="button"的元素

:image$(":image")所有type="image"的元素

:file$(":file")所有type="file"的元素

:enabled$(":enabled")全体激活的input成分

:disabled$(":disabled")全体禁止使用的input成分

:selected$(":selected")全部被筛选的input成分

:checked$(":checked")全数被选中的input成分

4.3 jQuery选取情势

4.3.1获得父级成分

* $(selector).parent();//获取第一手父级

* $(selector).parents('p'); //获取具备父级成分直到html

4.3.2拿到子代和后代的元素

* $(selector).children();//获取第一手子成分

* $(selector).find("span"); //获取具备的子孙成分

* find方法可能用的多。**

4.3.3收获同级的要素

* $(selector).siblings()//全部的兄弟节点

* $(selector).next()//下多少个节点

* $(selector).nextAll()//后边的有着节点

* $(selector).prev()//前者的男士儿节点

* $(selector).prevAll()//后面包车型大巴享有的男子节点

4.3.4过滤方法

* $("div p").last();//取最终一个因素

* $("div p").first();//取首个因素

* $("p").eq(1);//去第n个元素

*  $("p").filter(".intro");//过滤,采取具备p标签带有.intro类

$('p.intro')

*  $("p").not(".intro");//去除,跟下边包车型客车filetr赶巧相反

5.jQuery的Dom操作

5.1获取html的内容

$(selector).text()

-安装或再次来到所选成分的公文内容

$(selector).html()

-设置或再次来到所选成分的从头到尾的经过(富含HTML标识卡塔 尔(英语:State of Qatar)

$(selector).val()-设置或回到表单字段的值

拿到和设置相似格局名,通过分化参数来明确是获取照旧设置值

$("#blin").text("贝沃汇力");

var txt = $("#blin").text();

采用html来创设dom的方法功效比较高。远大于:document.createElement();**

5.2体裁操作

5.2.1为主样式操作

$(selector).css("color","red")  |css({})设置或再次来到相配成分的体裁属性。

$(selector).height()设置或回到匹配成分的可观。

$(selector).offset().left=> { left:99, top: 22}重返第贰个相配成分相对于文书档案的职位。left,top

$(selector).offsetParent()再次来到这两天的一向祖先成分。

$(selector).position()重临第八个相称成分相对于父成分的职位。

$(window).scrollLeft()设置或回到相配成分绝对滚动条左侧的撼动。

$(window).scrollTop(0)设置或回到相称成分相对滚动条顶上部分的撼动。

$(selector).on("scroll",function(){});

$(selector).width()设置或重回相称成分的大幅。

5.2.2样式类操作*尽量操作样式类,少直接操作css属性*

$(selector).addClass('class');向相称的要素增添钦赐的类名。

$(selector).removeClass('class');从有着相配的元素中删除全部要么钦命的类。

$(selector).toggleClass('class')从相称的因素中加上或删除三个类。

$(selector).hasClass('class')检查相称的要素是或不是具有钦赐的类。

5.3特性操作

$(selector).attr("id")设置或回到相称成分的品质和值

$(selector).removeAttr()从具备相称的成分中移除内定的属性。

5.4动态创造

$(selector).append()-在被选成分的最后插入内容

$(selector).append(node)

$(selector).append('

')

$(selector).appendTo(); -追加到..

$(selector).prepend()-在被选成分的上马插入内容

$(selector).after()-在被选成分之后插入内容

$(selector).before()-在被选成分在此以前插入内容

案例04城市政委员会大选择案例.html

6.事件管理

6.1精简事件绑定方法

.click(hander) .click() //绑定事件抑或触发click事件**

.blur() //失去核心事件,同上

.hover(mousein, mouseleave) //鼠标移入,移出

mouseout:当鼠标离开成分及它的子成分的时都会接触。**

mouseleave:当鼠标离开自身时才会触发,子成分不接触。

.dbclick()双击

change改造,比方:文本框发送改换,下来列表发生改变等...

focus得到宗旨

keyup, keydown, keypress :键盘键被按下。**

mousedown, mouseover

6.2绑定事件的点子bind方式(不推荐,1.7之后的jQuery版本被on代替卡塔 尔(阿拉伯语:قطر‎

语法格式:.bind( eventType [, eventData ], handler )

参数表明

先是个参数:事件类型

第一个参数:传递给事件响应措施的数额对象,能够差不离。

事件响应措施中获取数据方式:e.data

其七个参数:事件响应措施

其次个参数能够省略。

例如:

$("p").bind("click",  function(e){

//事件响应措施

});

$("p").on('click',function(e){

//事件响应措施

})

6.3 delegate形式(推荐,品质高,帮忙动态成立的成分卡塔尔国

*语法格式:$(selector).delegate(  selector, eventType, handler )

*语法表达:

-首个参数:selector,子选用器**

-第三个参数:事件类型

-第多少个参数:事件响应措施

```

例如:

$(".parentBox").delegate("p", "click", function(){

//为.parentBox上边包车型地铁享有的p标签绑定事件

});

$(".parentBox").on("click","p",  function(){

//为.parentBox下边包车型地铁具有的p标签绑定事件

});

```

*优势:成效较高*

6.4 one绑定一次事件的方法

*  .one( events [, data ], handler )

例如:

$( "p" ).one( "click",  function() {

alert( $( this ).text() );

});

$("p").on("click",function(){

$(this).off('click');//事件措施施行了二回后,就马上解绑事件

})

6.5 on绑定的措施(整合了bind、delegate烈提出使用的艺术卡塔 尔(英语:State of Qatar)卡塔 尔(阿拉伯语:قطر‎

jQuery1.7本子后,jQuery用on统一了颇负的事件管理的法子

语法格式:$(selector).on( events [, selector ] [, data  ], handler )

参数介绍:

第一个参数:events,事件名

第1个参数:selector,相近delegate

其多个参数:传递给事件响应措施的参数

第多个参数:handler,事件管理方法

例如:

//绑定贰个方法

$( "#dataTable tbody tr" ).on(  "click", function() {

console.log( $( this ).text() );

});

//给子成分绑定事件

$( "#dataTable tbody" ).on(  "click", "tr", function() {

console.log( $( this ).text() );

});

//绑定四个事件的情势

$( "div.test" ).on({

click: function() {

$( this ).toggleClass( "active"  );

}, mouseenter: function() {

$( this ).addClass(  "inside" );

}, mouseleave: function() {

$( this ).removeClass(  "inside" );

}

});

6.6解绑

unbind解绑bind方式绑定的事件(在jQuery1.7之上被on和off替代)

$(selector).unbind(); //解绑不论什么事件

$(selector).unbind("click"); //解绑内定的平地风波

undelegate解绑delegate事件

$( "p" ).undelegate(); //解绑全体的delegate事件

$( "p" ).undelegate( "click" ); //解绑全数的click事件

off解绑on格局绑定的风云

$( "p" ).off();

$("P").off('click');

$( "p" ).off( "click", "**" );

//解绑全体的click事件,多个*意味着全部

$( "body" ).off( "click", "p",  foo );

6.7触发事件

6.7.1大致事件触发

$(selector).click(); //触发click事件

6.7.2 trigger()方法触发被选成分的钦点事件类型。

$( "#foo" ).trigger( "click" );

6.7.3 triggerHandler触发事件响应措施,不触发浏览器行为(triggerHandler()方法触发被选成分的钦命事件类型。但不会实行浏览器默许动作,也不会时有发生事件冒泡。卡塔尔国**

$( "input" ).triggerHandler( "focus" );

6.8 event指标的简要介绍

event.data //传递的附加事件响应措施的额外参数

event.currentTarget === this //在事变响应措施中豆蔻年华致this,当前Dom对象

event.target //事件触发源,不自然===this

event.pageX //The mouse position relative to  the left edge of the document

event.pageY

event.stopPropagation()//阻止事件冒泡

e.preventDefault(); //阻止暗许行为

event.type //事件类型:click,dbclick...

event.which //鼠标的开关类型:左第11中学2右3

keydown : a,b,c

event.keyCode// code的c是大写

7. jQuery动漫系统

7.1逃匿呈现

*  $(selector).show(speed,callback);

*  $(selector).hide(1000);

*  $(selector).toggle("slow");

*五个措施的语法都同风流倜傥,参数能够有四个,第三个是动画片的快慢,第4个是卡通实行到位后的回调函数。

*先是个参数是:能够是单词恐怕纳秒数

7.2淡入淡出

$(selector).fadeIn(speed,  callback)

$(selector).fadeOut(1000)

$(selector).fadeToggle('fast',function(){})

参数等同于7.1

*

$(selector).fadeTo(.5); //淡入到0透明,1不透明

7.3滑动

*  $(selector).slideDown(speed,callback);

*  $(selector).slideUp(speed,callback);

*  $(selector).slideToggle(speed,callback);

7.4动画

*  $(selector).animate({params},speed,callback);

$("button").click(function(){

$("div").animate({

left:'250px',

opacity:'0.5',

height:'150px',

width:'150px'

},2000);

}).animate({},1000);

7.5实现动漫

*  $(selector).stop()

*  $(selector).stop(stopAll,goToEnd);

案例:

8. jQuery补充

8.1 each函数

全局的

$.each(array, function(index, object){})

普通jQuery对象的each方法

$("li").each(function(index, element){} )

1.转移页面标题标剧情

一时大家付出 h5页面的时候供给动态的去立异title 的名字,那个时候利用

JavaScript

document.title='订正后的名字';

1
    document.title='修改后的名字';

就足以缓慢解决大家的难点。

抑或应用

JavaScript

//当前firefox对 title 参数不帮忙 history.pushstate(state,title,url);

1
2
    //当前firefox对 title 参数不支持
    history.pushstate(state,title,url);

这种艺术不但能够改良 title 而且能够修正 url 的值,而且将这几个音信存储到浏览器的历史宾馆中,当客商接纳再次来到按钮的时候能够获得更为好的经历。
当大家在做三个无刷新更新页面数据的时候,能够行使这种情势来记录页面的意况,使得页面能够回降。

        myLog.js:主要功能是创设myLogger构造函数、增添行、增添节点、css调控。

2.日志记录同步发送央浼

有这么的多个场馆:
在做电商类的出品的时候,大家要对各类成品的点击数进行总计(其实就是出发三个ajax央浼卡塔尔国。PC端的交互作用大许多是点击商品后新开页面。当时ajax同步发送或者异步发送对总结未有影响。
不过嵌套在顾客端中,长长是在近年来 tab 中跳页。如若大家依旧采纳异步的ajax 央浼,有诉求会被堵嘴,总括结果不正确。

        LD.js:主要功能是对台本和字符串制订法规、构造命名空间和基于Id、className收取对象。

3.JavaScript 中 this 相关

那有的内容前边也是看过很频仍,可是都不可以知情深档期的顺序的意义。后来看的多了,也就知晓了。

JavaScript

var ab = { 'a': 1, 'b': 2, 'c': 3, abc:function(){ // 对象的主意中,this是绑定的这段日子目的 var that=this; console.log('abc'); var aaa=function(){ //that指向的是当前指标 console.log(that.a); //函数中this的值绑定的是大局的window对象 console.log(this); }; aaa(); } }; console.log('---------'); ab.abc();

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var ab = {
    'a': 1,
    'b': 2,
    'c': 3,
    abc:function(){
        // 对象的方法中,this是绑定的当前对象
        var that=this;
 
        console.log('abc');
        var aaa=function(){
            //that指向的是当前对象
            console.log(that.a);
            //函数中this的值绑定的是全局的window对象
            console.log(this);
        };
 
        aaa();
    }
};
console.log('---------');
ab.abc();

上述代码浏览器中输出结果如下:

图片 1

JavaScript

var BBB=function(){ var a=0; this.b=1; return this; } var bb= new BBB();

1
2
3
4
5
6
7
    var BBB=function(){
        var a=0;
        this.b=1;
        return this;
    }
 
    var bb= new BBB();

在浏览器中输入一下的原委查看输出:

图片 2

大家对代码做一下更换,如下:

JavaScript

var BBB=function(){ var a=0; this.b=1; } var bb= new BBB();

1
2
3
4
5
6
    var BBB=function(){
        var a=0;
        this.b=1;
    }
 
    var bb= new BBB();

与以上相仿的输入,查看一下出口是什么样

图片 3

由上可以见到 new 操作符的举办进度:

  1. 五个新指标被创制。它继续自BBB.prototype
  2. 结构函数 BBB 被施行。施行的时候,相应的传参加会议被传播,同期上下文this会被钦点为这一个新实例。new BBB 等同于new BBB(), 只好用在不传递任何参数的气象。
  3. 假诺构造函数再次来到了三个“对象”,那么这几个指标会代替一切new出来的结果。倘若构造函数未有重返对象,那么new出来的结果为步骤1开立的靶子。

    貌似情况下构造函数不回来任何值,不过客商假如想覆盖这么些重回值,能够友善选拔重回八个兴致索然对象来覆盖。当然,重返数组也会覆盖,因为数组也是目的。

        test.js:首要职能是对窗体加多事件,并测量试验mylog中有个别函数的可用性。

4.JavaScript 中闭包相关

概念在闭包中的函数能够“记念”它创设时候的条件。

JavaScript

var test=function(string){ return function(){ console.log(string); } }; var tt=test(); tt();

1
2
3
4
5
6
7
var test=function(string){
    return function(){
        console.log(string);
    }
};
var tt=test();
tt();

JavaScript

//li列表点击每大器晚成行 展现当前的行数 var add_li_event=function(node){ var helper=function(i){ return function(e){ alert(i); } }; for (var i = 0, len =node.length; i < len; i++) { node[i].onclick=helper(i); } };

1
2
3
4
5
6
7
8
9
10
11
12
//li列表点击每一行 显示当前的行数
var add_li_event=function(node){
    var helper=function(i){
        return function(e){
            alert(i);
        }
    };
 
    for (var i = 0, len =node.length; i < len; i++) {
       node[i].onclick=helper(i);
    }
};

        log.html:用于显示日志对象。

5.销毁事件绑定

自己本人在写 js 的事件绑定的时候也阅世了八个历程,刚初叶的时候onclickbindlivedelegate,on 那样二个进度。

故而会有那般的急需便是因为大家页面上的 DOM 是动态更新。举例说,某块内容是点击页面上的源委彰显出来,然后在此块新现身的开始和结果上接收click自然是满意不断供给的。

livedelegate 归属较早版本的事件委托(代管事人件卡塔 尔(阿拉伯语:قطر‎的写法。最新版本的 jquery 都以接收on 来做代办事件。效率上比 livedelegate更高。

live是将事件绑定到当下的document ,假如文档成分嵌套太深,在冒泡的进度中国电影响属性。
delegateon 的分化正是

JavaScript

jQueryObject.delegate( selector , events [, data ], handler ) //或者 jQueryObject.delegate( selector, eventsMap )

1
2
3
    jQueryObject.delegate( selector , events [, data ], handler )
    //或者
    jQueryObject.delegate( selector, eventsMap )

JavaScript

jQueryObject.on( events [, selector ] [, data ], handler ) //或者 jQueryObject.on( eventsMap [, selector ] [, data ] )

1
2
3
    jQueryObject.on( events [, selector ] [, data ], handler )
    //或者
    jQueryObject.on( eventsMap [, selector ] [, data ] )

想见,使用on的话,子代因素的接纳器是可选的。然而 delegate的选拔器是务必的。ondelegate越来越的灵活。

相当多时候我们都是只评释事件绑定,而任由事件的衰亡。然而在编排前端插件的时候,我们须求提供事件销毁的措施,提供给插件使用者调用。那样做的利润就是使,使用者对插件尤其可控,释放内存,提供页面包车型地铁习性。

JavaScript

var that={}; $('.event_dom').on('click','.childK_dom',function(){}); $(window).on('scroll',scroll伊夫nt); var scroll伊芙nt=function(){}; //事件销毁 that.desrory=function(){ $('.event_dom').off(); //window 方法的灭亡必得使用事件名称和回调函数,重如果 window 上或许绑定那系统自定义的平地风波和回掉 $(window).off('scroll',scrollEvent); };

1
2
3
4
5
6
7
8
9
10
    var that={};
    $('.event_dom').on('click','.childK_dom',function(){});
    $(window).on('scroll',scrollEvent);
    var scrollEvent=function(){};
    //事件销毁
    that.desrory=function(){
        $('.event_dom').off();
        //window 方法的销毁必须使用事件名称和回调函数,主要是 window 上可能绑定这系统自定义的事件和回掉
        $(window).off('scroll',scrollEvent);
    };

要是您感觉不错,请访谈github(点我卡塔尔国地址给本人意气风发颗星。多谢啦!

打赏支持本人写出越来越多好文章,多谢!

打赏作者

以下是各种文件代码:

打赏扶助本人写出越多好小说,谢谢!

任选生龙活虎种支付办法

图片 4 图片 5

3 赞 14 收藏 5 评论

test.js

关于笔者:zhiqiang21

图片 6

做认为对的政工,若是可能是错的,那就做认为自个儿选用得起的政工! 个人主页 · 笔者的作品 · 11 ·      

图片 7

[javascript] view plaincopyprint?//向window对象里面增添一个load事件  
LD.addEvent(window,'load',function(){ 
    LD.log.writeRaw('This is raw'); 
 
    LD.log.writeRaw('<strong>This is bold!</strong>'); 
 
    LD.log.header('With a header'); 
 
    LD.log.write('write source:<strong>This is bold!</strong>'); 
     
    for(i in document){ 
            LD.log.write(i); 
        } 
}); 
//向window对象里面增加一个load事件
LD.addEvent(window,'load',function(){
 LD.log.writeRaw('This is raw');

 LD.log.writeRaw('<strong>This is bold!</strong>');

 LD.log.header('With a header');

 LD.log.write('write source:<strong>This is bold!</strong>');
 
 for(i in document){
         LD.log.write(i);
  }
});myLog.js[javascript] view plaincopyprint?// JavaScript Document  
 
//myLogger的构造函数  
function myLogger(id){ 
    id=id||"ICLogWindow"; 
 
    //日志窗体的援用  
    var logWindow=null; 
    //成立日志窗体  
    var createWindow=function(){ 
            var browserWindowSize = LD.getBrowserWindowSize(); 
            var top=(browserWindowSize.height-200)/2||0; 
            var left=(browserWindowSize.width-200)/2||0; 
 
            //使用UL  
            logWindow=document.createElement("UL"); 
            //在document下增添三个dom对象UL  
 
            //增加ID举办标记        
            logWindow.setAttribute("id",id); 
 
            //对窗体举行css样式调控  
            logWindow.style.position='absolute'; 
            logWindow.style.top=top+'px'; 
            logWindow.style.left=left+'px'; 
     
            logWindow.style.width='200px'; 
            logWindow.style.height='200px'; 
            logWindow.style.overflow='scroll'; 
             
            logWindow.style.padding='0'; 
            logWindow.style.margin='0'; 
            logWindow.style.border='1px solid black'; 
            logWindow.style.backgroundColor='white'; 
            logWindow.style.listStyle='none'; 
            logWindow.style.font='10px/10px Verdana, Tahoma, Sans'; 
 
            //将窗体增加到页面上面  
            document.body.appendChild(logWindow); 
        } 
 
//向日志窗体中增添意气风发行  
    this.writeRaw=function(message){ 
            //若是初步窗体是空头支票的,则变化日志窗体  
        if(!logWindow){ 
                createWindow(); 
            } 
//创建li的dom节点  
        var li=document.createElement('LI'); 
 
        //对窗体进行css样式调整  
         
        li.style.padding='2px'; 
        li.style.border='0'; 
        li.style.borderBottom='1px dotted black'; 
        li.style.margin='0'; 
        li.style.color='#000'; 
 
        //      验证message信息  
        if(typeof message == 'undefined'){ 
 
                //在li里面添Gavin本节点。  
                li.appendChild(  
                    document.createTextNode('Message is undefined')     
                    ); 
            }else if(typeof li.innerHTML!=undefined){ 
        //那是另后生可畏种方法的表明  
                    li.innerHTML=message; 
                }else{ 
                        li.appendChild( 
                            document.createTextNode(message)        
                        ); 
                    } 
                logWindow.appendChild(li); 
                return true; 
        }; 

//对象字面量的章程宣示特权方法  
//向日志窗体中加多后生可畏行,向输入的内容举办简易管理  
myLogger.prototype={ 
     
    write:function(message){ 
        if(typeof message=='string' && message.length==0 ){ 
                return this.writeRaw('未有输入消息'); 
             
        } 
        if(typeof message !='string'){ 
                if(message.toString){ 
                    return this.writeRaw(message.toString()); 
                }else{ 
                    return this.writeRaw(typeof message); 
                } 
            } 
//将不仅仅号小于号举行正则调换到HTML标志  
        message=message.replace(/</g,"<").replace(/>/g,">"); 
        return this.writeRaw(message); 
    }, 
    header:function(message){ 
        message='<span style="color:white;background-color:black;font-weight:bold;padding:0px 5px;">'+message+'</span>'; 
        return this.writeRaw(message); 
        } 
}; 
window['LD']['log'] = new myLogger(); 
// JavaScript Document

//myLogger的构造函数
function myLogger(id){
 id=id||"ICLogWindow";

 //日志窗体的引用
 var logWindow=null;
 //创造日志窗体
 var createWindow=function(){
         var browserWindowSize = LD.getBrowserWindowSize();
   var top=(browserWindowSize.height-200)/2||0;
   var left=(browserWindowSize.width-200)/2||0;

   //使用UL
   logWindow=document.createElement("UL");
   //在document下增加一个dom对象UL

   //加多ID举办标记     
   logWindow.setAttribute("id",id);

   //对窗体实行css样式调控
   logWindow.style.position='absolute';
   logWindow.style.top=top+'px';
   logWindow.style.left=left+'px';
 
   logWindow.style.width='200px';
   logWindow.style.height='200px';
   logWindow.style.overflow='scroll';
   
   logWindow.style.padding='0';
   logWindow.style.margin='0';
   logWindow.style.border='1px solid black';
   logWindow.style.backgroundColor='white';
   logWindow.style.listStyle='none';
   logWindow.style.font='10px/10px Verdana, Tahoma, Sans';

   //将窗体增添到页面上边
   document.body.appendChild(logWindow);
  }

//向日志窗体中增添后生可畏行
 this.writeRaw=function(message){
         //若是开头窗体是空头支票的,则变化日志窗体
  if(!logWindow){
    createWindow();
   }
//创建li的dom节点
  var li=document.createElement('LI');

  //对窗体进行css样式调整
  
  li.style.padding='2px';
  li.style.border='0';
  li.style.borderBottom='1px dotted black';
  li.style.margin='0';
  li.style.color='#000';

  //  验证message信息
  if(typeof message == 'undefined'){

          //在li里面添Gavin本节点。
    li.appendChild(
     document.createTextNode('Message is undefined')   
     );
   }else if(typeof li.innerHTML!=undefined){
        //这是另生机勃勃种情势的表述
     li.innerHTML=message;
    }else{
      li.appendChild(
       document.createTextNode(message)   
      );
     }
    logWindow.appendChild(li);
    return true;
  };
}
//对象字面量的艺术宣示特权方法
//向日志窗体中增多风流罗曼蒂克行,向输入的剧情开展简单管理
myLogger.prototype={
 
 write:function(message){
  if(typeof message=='string' && message.length==0 ){
          return this.writeRaw('未有输入音信');
   
  }
  if(typeof message !='string'){
    if(message.toString){
     return this.writeRaw(message.toString());
    }else{
     return this.writeRaw(typeof message);
    }
   }
//将超过号小于号进行正则调换到HTML标识
  message=message.replace(/</g,"<").replace(/>/g,">");
  return this.writeRaw(message);
 },
 header:function(message){
  message='<span style="color:white;background-color:black;font-weight:bold;padding:0px 5px;">'+message+'</span>';
  return this.writeRaw(message);
  }
};
window['LD']['log'] = new myLogger();LD.js[javascript] view plaincopyprint?// JavaScript Document  
if(document.all && !document.getElementById){ 
    document.getElementById=function(id){ 
        return document.all[id]; 
        } 
    } 
 
if(!String.repeat){ 
        String.prototype.repeat=function(l){ 
            return new Array(l+1).join(this); 
            } 
    } 
 
if(!String.trim){ 
        String.prototype.trim=function(){ 
                return this.replace(/^s+|+$/g,''); 
            }  
    } 
 
(function(){ 
    //构造命名空间  
    window['LD']={} ;   
     
    function $(){ 
        var elements=new Array(); 
        //arguments当前函数的参数数组。参数  
        for(var i=0;i<arguments.length;i++){ 
                var element=arguments[i]; 
                 
                if(typeof element=='string'){ 
                        element=document.getElementById(element); 
                    } 
                if(arguments.length==1){ 
                    return element; 
                    } 
                elements.push(element); 
        } 
        return elements; 
    } 
    //注册命名空间  
    window['LD']['$']=$; 
     
    function getElementsByClassName(className,tag){ 
            parent=parent || document; 
            if(!(parent=$(parent))) return false; 
             
             
            //var allTags=document.getElementsByTagName(tag);  
            //对tag实行过滤,把tag的对象全收取来  
            var allTags=(tag == "*" && parent.all) ? parent.all : parent.getElementsByTagName(tag); 
            var matchingElements=new Array(); 
             
            className=className.replace(/-/g,"\-"); 
            var regex=new  RegExp("(^|\s)"+className+ "(\s|$)"); 
             
            var element; 
            for(var i=0;i<allTags.length;i++){ 
                    element=allTags[i]; 
                    if(regex.test(element.className)){ 
                            matchingElements.push(element); 
                        } 
                } 
                 
                //再次回到那几个数组  
            return matchingElements; 
        } 
        window['LD']['getElementsByClassName']=getElementsByClassName; 
         
        function bindFunction(ojb,func){ 
                return function(){ 
                        func.apply(obj,arguments); 
                    } 
            }; 
        window['LD']['bindFunction']=bindFunction; 
         
    function getBrowserWindowSize(){ 
            var de=document.documentElement; 
            return{ 
                    'width':( 
                        window.innerWidth 
                        || (de && de.clientWidth) 
                        || document.body.clientWidth), 
                    'heigth':( 
                        window.innerHeight 
                        || (de && de.clientHeight) 
                        || de && document.body.clientHeight) 
                } 
        }; 
        //注册技巧件  
    window['LD']['getBrowserWindowSize']=getBrowserWindowSize; 
     
     
    function addEvent(node,type,listener){ 
            if(!(node=$(node))) return false; 
             
            if(node.addEventListener){ 
                node.addEventListener(type,listener,false); 
                return true; 
               }else if(node.attachEvent){ 
                    node['e'+type+listener]=listener; 
                    node[type+listener]=function(){node['e'+type+listener](window.event);} 
                    node.attachEvent('on'+type, node[type+listener]); 
                    return true; 
                   } 
               return false; 
        }; 
        //注册技艺件  
    window['LD']['addEvent']=addEvent; 
     
})(); 
// JavaScript Document
if(document.all && !document.getElementById){
 document.getElementById=function(id){
  return document.all[id];
  }
 }

if(!String.repeat){
  String.prototype.repeat=function(l){
   return new Array(l+1).join(this);
   }
 }

if(!String.trim){
  String.prototype.trim=function(){
    return this.replace(/^s+|+$/g,'');
   }
 }

(function(){
 //构造命名空间
 window['LD']={} ; 
 
 function $(){
  var elements=new Array();
  //arguments当前函数的参数数组。参数
  for(var i=0;i<arguments.length;i++){
    var element=arguments[i];
    
    if(typeof element=='string'){
      element=document.getElementById(element);
     }
    if(arguments.length==1){
     return element;
     }
    elements.push(element);
  }
  return elements;
 }
 //注册命名空间
 window['LD']['$']=$;
 
 function getElementsByClassName(className,tag){
   parent=parent || document;
   if(!(parent=$(parent))) return false;
   
   
   //var allTags=document.getElementsByTagName(tag);
   //对tag进行过滤,把tag的对象全收取来
   var allTags=(tag == "*" && parent.all) ? parent.all : parent.getElementsByTagName(tag);
   var matchingElements=new Array();
   
   className=className.replace(/-/g,"\-");
   var regex=new  RegExp("(^|\s)"+className+ "(\s|$)");
   
   var element;
   for(var i=0;i<allTags.length;i++){
     element=allTags[i];
     if(regex.test(element.className)){
       matchingElements.push(element);
      }
    }
    
    //重临这么些数组
   return matchingElements;
  }
  window['LD']['getElementsByClassName']=getElementsByClassName;
  
  function bindFunction(ojb,func){
    return function(){
      func.apply(obj,arguments);
     }
   };
  window['LD']['bindFunction']=bindFunction;
  
 function getBrowserWindowSize(){
   var de=document.documentElement;
   return{
     'width':(
      window.innerWidth
      || (de && de.clientWidth)
      || document.body.clientWidth),
     'heigth':(
      window.innerHeight
      || (de && de.clientHeight)
      || de && document.body.clientHeight)
    }
  };
  //注册技能件
 window['LD']['getBrowserWindowSize']=getBrowserWindowSize;
 
 
 function addEvent(node,type,listener){
   if(!(node=$(node))) return false;
   
   if(node.addEventListener){
       node.addEventListener(type,listener,false);
    return true;
      }else if(node.attachEvent){
        node['e'+type+listener]=listener;
     node[type+listener]=function(){node['e'+type+listener](window.event);}
     node.attachEvent('on'+type, node[type+listener]);
     return true;
       }
      return false;
  };
  //注册技巧件
 window['LD']['addEvent']=addEvent;
 
})();运维结果:

 

图片 8

总结

        这一个小例子,基本上把早前所学内容,满含底子支撑、面向对象、原型、对象字面量、this、功能域链等知识点全体囊括,算是对JavaScript学习的三个总括。学的越来越多,越要找到所学内容之间的沟通,学习JS,不只是单独学习JS,更要挂钩早先所学的面向对象、C#、CSS等学问,让知识像路同样一通百通,手艺“书越读越薄”。今后能做的,就是一而再再而三营造小编的知识网。

 作者:lidaasky  

myLog.js:首要作用是构建myLogger构造...

本文由澳门威斯尼人平台登录发布于Web前端,转载请注明出处:JavaScript日志操作对象实例,开拓相关内容总括

相关阅读