国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

原生js仿jquery一些常用方法(必看篇)

2019-11-20 08:56:08
字體:
來源:轉載
供稿:網友

最近迷上了原生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 將會在下一篇寫道。

原生js實現ajax方法

以上就是小編為大家帶來的原生js仿jquery一些常用方法(必看篇)的全部內容了,希望對大家有所幫助,多多支持武林網~

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 建水县| 枝江市| 灌云县| 黑河市| 兴安盟| 牟定县| 乌海市| 中方县| 松潘县| 股票| 贡嘎县| 尼玛县| 横山县| 南川市| 天门市| 瑞安市| 甘泉县| 随州市| 汉阴县| 景谷| 明溪县| 临潭县| 平泉县| 克什克腾旗| 九寨沟县| 青神县| 类乌齐县| 会同县| 兰考县| 扬州市| 巴林右旗| 察隅县| 灵石县| 楚雄市| 连山| 商丘市| 襄樊市| 白山市| 昌乐县| 巨野县| 大冶市|