jQuery技术

用原生JavaScript实现jQuery的某些简单功能(2)

字号+ 作者:H5之家 来源:H5之家 2016-12-27 14:00 我要评论( )

1 // attr()方法 2 lquery.prototype.attr = function(attr,value){ 3 4if(arguments.length == 2){ //设置 5for(var i=0;ithis.elements.length;i++){ 6this.elements[i].setAttribute(attr,value); 7} 8} 9else i

1 // attr()方法 2 lquery.prototype.attr = function(attr,value){ 3 4 if(arguments.length == 2){ //设置 5 for(var i=0;i<this.elements.length;i++){ 6 this.elements[i].setAttribute(attr,value); 7 } 8 } 9 else if(arguments.length == 1){ //获取 10 return this.elements[0].getAttribute(attr); 11 } 12 return this; 13 };

 

▓▓▓▓▓▓ eq()方法的实现

    实现$('div').eq(1)

    由于eq()方法返回的对象要操作许多lQuery的方法,所以返回的对象必须是lQuery对象

1 lQuery.prototype.eq = function(num){ 2 return lQ(this.elements[num]); 3 };

 

▓▓▓▓▓▓ index()方法的实现

    实现$('div').index() 返回这个元素在同辈元素中的位置

1 lQuery.prototype.index = function(){ 2 3 var elems = this.elements[0].parentNode.children; 4 5 for(var i=0;i<elems.length;i++){ 6 if( elems[i] == this.elements[0] ){ 7 return i; 8 } 9 } 10 };

 

▓▓▓▓▓▓ 阻止默认事件和阻止事件冒泡

    在jQuery中 return false 是阻止默认事件和事件冒泡,所以我们要对lQbind函数进行修改,通过判断绑定的函数的返回值是否为false来判断是否要进行阻止默认事件和阻止事件冒泡

1     function lQbind(obj,events,fn){ 2 if(obj.addEventListener){ 3 obj.addEventListener(events,function(ev){ 4 5 if( fn() == false ){ 6 ev.preventDefault(); 7 ev.cancelBubble = true; 8 } 9 10 },false); 11 } 12 else{ 13 obj.attachEvent('on'+events,function(){ 14 15 if( fn() == false ){ 16 window.event.cancelBubble = true; 17 return false; 18 } 19 20 }); 21 } 22 }

 

▓▓▓▓▓▓ find()方法的实现

    仿写$('div').find('.box')和$('div').find('#box')方法

    这里涉及到通过判断find()参数第一个字符的方法来进行不同的操作和$()方法差不多,在循环时要使用concat()方法来连接数组,最后返回一个lQuery对象

1 lQuery.prototype.find = function(sel){ 2 3 var arr = []; 4 5 if( sel.charAt(0) == '.' ){ 6 for(var i=0;i<this.elements.length;i++){ 7 arr = arr.concat(getClass( this.elements[i] , sel.substring(1) )); 8 } 9 } 10 else{ 11 for(var i=0;i<this.elements.length;i++){ 12 arr = arr.concat(toArray(this.elements[i].getElementsByTagName(sel))); 13 } 14 } 15 return lQ(arr); 16 };

 

    

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评