原生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.clientHeight<this.scrollHeight){
  this.style.height=10+this.clientHeight+"px";
  var _this = this;
  setTimeout(function(){_this.slideDown()},10)
 }else{
  this.style.height=this.scrollHeight+"px";
 }
}
//slideUp()
Object.prototype.slideUp = function(){
 if(this.clientHeight>0){
  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\W]+>)[^>]*|#([\w-]*))$/;
 var classExpr = /^(?:\s*(<[\w\W]+>)[^>]*|.([\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 将会在下一篇写道。

源:http://www.jb51.net/article/93036.htm

时间: 2024-08-06 03:45:46

原生js仿jquery一些常用方法的相关文章

原生JS与jQuery操作DOM有什么异同点?

本文和大家分享的主要是原生JS与jQuery操作DOM相关内容,一起来看看吧,希望对大家学习javascript有所帮助. 一.创建元素节点 1.1 原生 JS 创建元素节点 document.createElement("p"); 1.2 jQuery 创建元素节点 $('<p></p>');` 二.创建并添加文本节点 2.1 原生JS创建文本节点 document.createTextNode("Text Content"); 通常创建文

【JS】怎样用原生JS实现jQuery的ready方法

Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,只是与window.onload方法还是有差别的. 总的来说,window.onload()方法是必须等到页面内包含图片的全部元素载入完成后才干运行. $(document).ready()是DOM结构绘制完成后就运行,不必等到载入完成.   详细一些.能够从下面几方面对照它们的差别: 1.运行时间 window.onload必须等到页面内包含图片的全部元素载入完成后才干运

原生js和Jquery操作DOM

原生javascript和jQuery操作DOM的对比总结 目录: DOM元素节点:1)文档节点:2)元素节点:3)属性节点:4)文本节点:5)注释节点 1)创建节点 2)选择(访问)节点 3)操作: 1)节点操作 1)添加节点 2)删除节点 3)修改内容: 1)文本[text] 2)html 3)表单val 4)改变事件 2)CSS操作 3)动画 下文转自:http://www.jb51.net/article/103583.htm 这篇文章主要给大家介绍了原生JS和jQuery操作DOM的一

【第2章第300回】原生JS与jQuery对AJAX的实现

一.定义 W3C里这么解释AJAX: AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML).AJAX 不是新的编程语言,而是一种使用现有标准的新方法.AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下. 就是利用JS来无刷新与后端交互,通过get和post方式把数据发送到后端,或者请求后端的数据,然后根据请求的数据进行改变DOM节点等操作,从而取消掉用form的submit方式一提交就会跳转页面的情况

&lt;&lt;&lt; 网页中如何利用原生js和jquery储存cookie

javascript当中的cookie机制,使应用达到了真正的全局变量的要求,cookie是浏览器提供的一种机制,它将document 对象的cookie属性提供给JavaScript.可以由JavaScript对其进行控制,而并不是JavaScript本身的性质,由于cookie机制是把信息储存到硬盘,所以他可以用来做全局变量 cookie有关安全性和作用域 1.cookie可能被禁用.当用户非常注重个人隐私保护时,他很可能禁用浏览器的cookie功能:  2.cookie是与浏览器相关的.这

【前端性能】必须要掌握的原生JS实现JQuery

很多时候,我们经常听见有人说jquery有多快多快.在这个各种类库满天飞的时候,不得不说的是,能有原生JS快吗? 是的,明显原生JS要更快,因为诸如JQuery这样的库必须要兼容各种浏览器和低版本和许多其他的东西,考虑通用性必然会导致性能的损耗. 当然,我不是提倡写代码纯用原生JS实现,我记得淘宝玉伯曾经说的一句话“框架能够让我们走的更快,但只有了解原生的JS才能让我们走的更远”. 一些感(fei)想(hua): 1.原生的js,好比全真教的武功,一步步从基础开始(先练气再御剑),很长一段时间内

【JS】如何用原生JS实现jQuery的ready方法

Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,不过与window.onload方法还是有区别的. 总的来说,window.onload()方法是必须等到页面内包括图片的所有元素加载完毕后才能执行.$(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕.   具体一些,可以从以下几方面对比它们的区别: 1.执行时间 window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行

原生js 与 jQuery对比

1.原生JS与jQuery操作DOM对比  :   https://www.cnblogs.com/QianBoy/p/7868379.html 2.比较jQuery与JavaScript的不同功能实现   :   http://www.cnblogs.com/QianBoy/p/7868291.html 原文地址:https://www.cnblogs.com/wfblog/p/9178892.html

原生js、jQuery实现选项卡功能

在大家在网上平常浏览网页的时候,想必各位都会看到选项卡功能,在这里给大家详解一下用原生js.jQuery如何来写一些基本的选项卡 话不多说,先给各位看一下功能图:              好了,下边开始写代码了: HTML代码: <ul> <li class="click">red</li> <li>blue</li> <li>yellow</li> </ul> <div class