js仿jquery步骤详解

这次给大家带来js仿jquery步骤详解,js仿jquery的注意事项有哪些,下面就是实战案例,一起来看一下。

最近迷上了原生js,能不用jquery等框架的情况都会手写一些js方法,记得刚接触前端的时候为了选择器而使用jquery。。。现在利用扩展原型的方法实现一些jquery函数:

1.显示/隐藏

//hide() Object.prototype.hide = function(){  this.style.display="none";  return this; } //show() Object.prototype.show = function(){  this.style.display="block";  return this; }

登录后复制

return this的好处在于链式调用。

2.滑动 省略speed和callback的传入,因为要加一串判断和处理回调,代码量大

//slideDown() Object.prototype.slideDown = function(){  this.style.display = 'block';  if(this.clientHeight0){   this.style.height=this.clientHeight-10+"px";   var _this = this;   setTimeout(function(){_this.slideUp()},10)  }else{   this.style.height=0;   this.style.display = 'none';  } }

登录后复制

3.捕获/设置

//attr() Object.prototype.attr = function(){  if(arguments.length==1){   return eval("this."+arguments[0]);  }else if(arguments.length==2){   eval("this."+arguments[0]+"="+arguments[1]);   return this;  } } //val() Object.prototype.val = function(){  if(arguments.length==0){   return this.value;  }else if(arguments.length==1){   this.value = arguments[0];   return this;  } } //html() Object.prototype.html = function(){  if(arguments.length==0){   return this.innerHTML;  }else if(arguments.length==1){   this.innerHTML = arguments[0];   return this;  } } //text()需要在html()结果基础上排除标签,会很长,省略

登录后复制

4.CSS方法

//css() Object.prototype.css = function(){  if(arguments.length==1){   return eval("this.style."+arguments[0]);  }else if(arguments.length==2){   eval("this.style."+arguments[0]+"='"+arguments[1]+"'");   return this;  } }

登录后复制

 5.添加元素

//append() Object.prototype.append = function(newElem){  this.innerHTML += newElem;  return this; } //prepend() Object.prototype.prepend = function(newElem){  this.innerHTML = arguments[0] + this.innerHTML;  return this; } //after() Object.prototype.after = function(newElem){  this.outerHTML += arguments[0];  return this; } //before() Object.prototype.before = function(newElem){  this.outerHTML = arguments[0] + this.outerHTML;  return this; }

登录后复制

6.删除/替换元素

//empty() Object.prototype.empty = function(){  this.innerHTML = "";  return this; } //replaceWith() Object.prototype.replaceWith = function(newElem){  this.outerHTML = arguments[0];  return this; } //remove() js自带,省略。

登录后复制

7.设置css类

//hasClass() Object.prototype.hasClass = function(cName){  return !!this.className.match( new RegExp( "(\s|^)" + cName + "(\s|$)") ); } //addClass() Object.prototype.addClass = function(cName){  if( !this.hasClass( cName ) ){   this.className += " " + cName;  }  return this; } //removeClass() Object.prototype.removeClass = function(cName){  if( this.hasClass( cName ) ){   this.className = this.className.replace( new RegExp( "(\s|^)" + cName + "(\s|$)" )," " );  }  return this; }

登录后复制

上面的设置CSS类也可以利用html5新API classList及contains实现 但不兼容IE8以下及部分火狐浏览器

Object.prototype.hasClass = function(cName){  return this.classList.contains(cName) } Object.prototype.addClass = function(cName){  if( !this.hasClass( cName ) ){   this.classList.add(cName);  }  return this; } Object.prototype.removeClass = function(cName){  if( this.hasClass( cName ) ){   this.classList.remove(cName);  }  return this; }

登录后复制

9.选择器

//id或class选择器$("elem") function $(strExpr){  var idExpr = /^(?:s*()[^>]*|#([w-]*))$/;  var classExpr = /^(?:s*()[^>]*|.([w-]*))$/;  if(idExpr.test(strExpr)){   var idMatch = idExpr.exec(strExpr);   return document.getElementById(idMatch[2]);  }else if(classExpr.test(strExpr)){   var classMatch = classExpr.exec(strExpr);   var allElement = document.getElementsByTagName("*");   var ClassMatch = [];   for(var i=0,l=allElement.length; i<l; i++){    if(allElement[i].className.match( new RegExp( "(\s|^)" + classMatch[2] + "(\s|$)") )){     ClassMatch.push(allElement[i]);    }   }   return ClassMatch;  } }

登录后复制

需要强调的是,选择器返回的结果或结果集包含的是htmlDOM,并非jquery的对象。大多数人都知道,document.getElementById(“id”)等价于jquery$(“#id”)[0],另外上面class选择器选择的结果如需使用,需要利用forEach遍历:

$(".cls").forEach(function(e){  e.css("background","#f6f6f6") })

登录后复制

10.遍历 siblings()和children()获取的结果也需要结合forEach使用

//siblings() Object.prototype.siblings = function(){  var chid=this.parentNode.children;  var eleMatch = [];  for(var i=0,l=chid.length;i<l;i++){   if(chid[i]!=this){    eleMatch.push(chid[i]);   }  }  return eleMatch; } //children() 原生js已含有该方法,故命名为userChildren。 Object.prototype.userChildren = function(){  var chid=this.childNodes;  var eleMatch = [];  for(var i=0,l=chid.length;i<l;i++){   eleMatch.push(chid[i]);  }  return eleMatch; } //parent() Object.prototype.parent = function(){  return this.parentNode; } //next() Object.prototype.next = function(){  return this.nextElementSibling; } //prev() Object.prototype.prev = function(){  return this.previousElementSibling; }

登录后复制

jquery事件函数原生js已有,另外,原生js实现jquery的一个常用函数 ajax 将会在下一篇写道。

原生js实现ajax方法

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

JS中时间单位比较的方法

JS操作JSON详细介绍

以上就是js仿jquery步骤详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2769432.html

(0)
上一篇 2025年3月8日 12:21:33
下一篇 2025年3月8日 12:21:39

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • js定义类有哪些方法

    这次给大家带来js定义类有哪些方法,js定义类的注意事项有哪些,下面就是实战案例,一起来看一下。 ECMAScript6已经支持了class,但之前版本都不支持类,但是可以通过一些方法来模拟类。 js中的类,既是重点,也是难点,很多时候都感…

    编程技术 2025年3月8日
    200
  • JS数组方法总结

    这次给大家带来js数组方法总结,使用js数组方法的注意事项有哪些,下面就是实战案例,一起来看一下。 前面的话   数组总共有22种方法,本文将其分为对象继承方法、数组转换方法、栈和队列方法、数组排序方法、数组拼接方法、创建子数组方法、数组删…

    编程技术 2025年3月8日
    200
  • JS常用技巧有哪些

    这次给大家带来js常用技巧有哪些,使用js常用技巧的注意事项有哪些,下面就是实战案例,一起来看一下。 1. oncontextmenu=”window.event.returnValue=false” 将彻底屏蔽鼠标右键  登录后复制no …

    编程技术 2025年3月8日
    200
  • js注入使用详解

    这次给大家带来js注入使用详解,js注入使用的注意事项有哪些,下面就是实战案例,一起来看一下。 最近刚出了新闻,阿里四名网络安全部门员工利用网页漏洞写js脚本抢月饼,于是兴致来了,想了解一下这个js脚本到底怎么写,各种刷单各种抢枪抢又是怎么…

    编程技术 2025年3月8日
    200
  • 提高JS执行效率总结

    这次给大家带来提高JS执行效率总结,提高JS执行效率的注意事项有哪些,下面就是实战案例,一起来看一下。 1.使用逻辑符号&&或者||进行条件判断 var foo = 10; foo == 10 && doSo…

    编程技术 2025年3月8日
    200
  • js内置方法和对象使用详解

    这次给大家带来js内置方法和对象使用详解,js内置方法和对象使用的注意事项有哪些,下面就是实战案例,一起来看一下。 JS内置函数不从属于任何对象,在JS语句的任何地方都可以直接使用这些函数。JS中常用的内置函数如下: 1、eval(str)…

    编程技术 2025年3月8日
    200
  • jQuery三种$()使用案例

    这次给大家带来jQuery三种$()使用案例,jQuery三种$()使用的注意事项有哪些,下面就是实战案例,一起来看一下。 $号是jQuery“类”的一个别称,$()构造了一个jQuery对象。所以,“$()”可以叫做jQuery的构造函数…

    编程技术 2025年3月8日
    200
  • jQuery实现弹窗效果(附代码)

    这次给大家带来jQuery实现弹窗效果(附代码),jQuery实现弹窗效果的注意事项有哪些,下面就是实战案例,一起来看一下。 这里利用jquery实现两种弹窗效果: 1. 淡入弹窗效果: www.jb51.net jQuery弹窗 *{pa…

    2025年3月8日
    200
  • jQuery中for循环var与let使用详解

    这次给大家带来jQuery中for循环var与let使用详解,jQuery中for循环var与let使用的注意事项有哪些,下面就是实战案例,一起来看一下。 今天在写jQuery请求接口中发现一个问题:       在用AJAX发送请求中又嵌…

    编程技术 2025年3月8日
    200
  • jQuery框架使用详解

    这次给大家带来jQuery框架使用详解,jQuery框架使用的注意事项有哪些,下面就是实战案例,一起来看一下。 下面将使用简化的代码来介绍,主要关注jQuery的实现思想~>_ //匿名立即执行函数//.防止污染全局空间//.选择性保…

    2025年3月8日
    200

发表回复

登录后才能评论