封装自己的js库(一)---仿照JQuery

这一篇代码初步实现最基础的功能:元素选择(3种方式:id选择器,类选择器,元素选择器),事件绑定,show(),hide()...

1.index.html
<!DOCTYPE>
<html>
	<head>
		<meta charset="utf-8" />
		<title>VQuery</title>
		<style>
			#div{
				width: 200px;
				height: 200px;
				background-color: red;
				}
				
		</style>
		<!--<script type="text/javascript" src="js/jquery-1.11.1.js" ></script>-->
		<script src="js/VQuery.js"></script>
		<script type="text/javascript">

			$(function(){   //相当于window.οnlοad=function(){}
//				new VQuery('#btn1').click(function(){
//					alert('a');
//				});
//				new VQuery('.one').click(function(){
//					alert('b');
//				});
//				$('input').click(function(){
//					alert('c');
//				});
//				$('#btn1').click(function(){
//					$('#div').show();
//				});
//				$('#btn2').click(function(){
//					$('#div').hide();
//				});
				$('#div').hover(function(){
					$(this).css('background-color',"red");
				},function(){
					$(this).css('background-color',"black");
				});
//				$('#div').click(function(){
//					alert($('#div').css('width'));
//				});
			});
			
			
		</script>
	</head>
	<body>
		<input id="btn1" type="button" value="显示" />
		<input id="btn2" type="button" value="隐藏" />
		<div id="div" ></div>
		<!--<input class="one" type="button" value="按钮3" /><br />
		<input class="one" type="button" value="按钮4" /><br />-->
	</body>
</html>


2.VQuery.js
function $(arg){
	return new VQuery(arg);
}

function myAddEvent(obj,evt,fn){  //事件绑定,将会让一个事件发生多个
	if(obj.attachEvent){ 
		obj.attachEvent('on'+evt,fn); //attachEvent方法只支持IE浏览器,执行顺序是,后绑定的先执行.
	}else{    
		//功能相同的指令是addEventListener,该指令支持FF等浏览器,并且是W3C标准
		obj.addEventListener(evt,fn,false); //执行顺序是,先绑定的先执行
	}
}

function getByClass(oparent,oclass){  //指定标签名下的className
	var aEle=oparent.getElementsByTagName('*');
	var result=[];
	var i=0;
	for (i=0;i<aEle.length;i++) {
		if (aEle[i].className==oclass) {
			result.push(aEle[i]);
		}	
	}
	return result;
} 

function getStyle(obj,attr){
	if(obj.currentStyle){  //行内样式
		return obj.currentStyle[attr];
	}else{					//嵌入样式,外联样式
		return getComputedStyle(obj,false)[attr];
	}
}

//arg类型:
//1.函数
//2.字符串:  #xxx,.xxx,X
//3.对象
function VQuery(arg){
	//用来保存选中的元素
	this.elements=[];
	
	switch(typeof arg){
		case 'function':
				myAddEvent(window,'load',arg);  //使用window.onload当多个时间发生时,会产生覆盖
				break; 
		case 'string':
				switch(arg.charAt(0)){
					case '#':	//Id
						//#id
						var obj=document.getElementById(arg.substring(1));
						this.elements.push(obj);
						break;
					case '.':   //className
						//.class
						this.elements=getByClass(document,arg.substring(1));
						break;
					default:	//TagName	
						this.elements=document.getElementsByTagName(arg);
				}
				break;
		case 'object':
				this.elements.push(arg);
	}
}
//点击事件
VQuery.prototype.click=function(fn){
	var i=0;
	for (i=0;i<this.elements.length;i++) {
		myAddEvent(this.elements[i],'click',fn);
	}
};

VQuery.prototype.show=function(){
	for (var i=0;i<this.elements.length;i++) {
		this.elements[i].style.display='block';
	}
};
VQuery.prototype.hide=function(){
	for (var i=0;i<this.elements.length;i++) {
		this.elements[i].style.display='none';
	}
};
VQuery.prototype.hover=function(over,out){
	for (var i=0;i<this.elements.length;i++) {
		myAddEvent(this.elements[i],'mouseover',over);
		myAddEvent(this.elements[i],'mouseout',out);
	}
};
VQuery.prototype.css=function(attr,value){
	if(arguments.length==2){
		for (var i=0;i<this.elements.length;i++) {
			this.elements[i].style[attr]=value;
		}
	}else{
		return getStyle(this.elements[0],attr);
	}
}


以上代码整理自妙味课堂JS学习视频!


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值