之前在网上发现这篇文章,觉得挺不错的,现在就分享给大家,也给大家做个参考。侵删!
最近迷上了原生js,能不用jquery等框架的情况都会手写一些js方法,记得刚接触前端的时候为了选择器而使用jquery。。。现在利用扩展原型的方法实现一些jquery函数:
显示/隐藏
1 | //hide() |
滑动
省略speed和callback的传入,因为要加一串判断和处理回调,代码量大1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22//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';
}
}
捕获/设置
1 | //attr() |
CSS方法
1 | //css() |
添加元素
1 | //append() |
删除/替换元素
1 | //empty() |
设置css类
1 | //hasClass() |
- 上面的设置CSS类也可以利用html5新API classList及contains实现 但不兼容IE8以下及部分火狐浏览器
1 | Object.prototype.hasClass = function(cName){ |
选择器
1 | //id或class选择器$("elem") |
- 需要强调的是,选择器返回的结果或结果集包含的是htmlDOM,并非jquery的对象。大多数人都知道,document.getElementById(“id”)等价于jquery$(“#id”)[0],另外上面class选择器选择的结果如需使用,需要利用forEach遍历:
1 | $(".cls").forEach(function(e){ |
遍历 siblings()和children()获取的结果也需要结合forEach使用
1 | //siblings() |
- jquery事件函数原生js已有,另外,原生js实现jquery的一个常用函数 ajax 将会在下一篇写道。
原生js实现ajax方法
如下是一个比较完整的ajax()
1 | function ajax(){ |
使用格式跟jquery的ajax差不多:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15ajax({
type:"POST",
url:"ajax.php",
dataType:"json",
data:{"val1":"abc","val2":123,"val3":"456"},
beforeSend:function(){
//some js code
},
success:function(msg){
console.log(msg)
},
error:function(){
console.log("error")
}
})