js实现类似jquery基础功能 简单选择器/事件/属性

按钮样式定义
<style>
	.btn{display: inline-block;width: 100px;height: 20px;color: #fff;font-size: 12px;background-color: #0033dd;text-align: center;line-height: 20px;text-decoration: none;border:  5px #0000ff outset;}
	.btn-big-test{width: 300px;height: 85px;line-height: 85px;font-size: 25px;}

</style>

用基础js 实现了一个简单的具有元素选择支按id/name/class /tag/对象等方式的基础选择器,并实现了事件委托和移除机制,实现了属性操作功能和连续调用模式.异常捕捉

声明按钮
<a href="javascript:;"  class="btn-big-test btn" title=‘你点了一个巨大的按钮!‘>巨大的测试按钮</a>
<br/><br/>
<a href="javascript:;" id="removetest"  class="btn grey">移除test事件</a>
&nbsp;
<a href="javascript:;" id="addtest"   class="btn">开启test事件</a>
/*声明函数*/

	$_fn=function(selectName){
		this.selectName=selectName;
		this.obj=this.selectElement();
		return this;

	}
	//原型方法
	$_fn.prototype={
		//基础选择器 不包含子类 连续等模式选择器
		‘selectElement‘:function(){
			if(typeof this.selectName == ‘object‘){
				return this.selectName;
			}else if(this.selectName.indexOf("#")!=-1){
				return document.getElementById(this.selectName.replace(‘#‘,‘‘));
			}else if(this.selectName.indexOf(".")!=-1){
				return document.getElementsByClassName(this.selectName.replace(‘.‘,‘‘));
			}else if(this.selectName.indexOf("@")!=-1){
				return document.getElementsByName(this.selectName.replace(‘@‘,‘‘));
			}else{
				return document.getElementsByTagName(this.selectName);
			}
		},
		‘on‘:function(event,callback){

			try{
				$_eventStack[this.obj]=callback;
					if (/.*(Firefox|Safari|Chrome).*/.exec(window.navigator.userAgent)) {
						if(this.obj.length>0){
							for (var i=0;i<this.obj.length;i++) {
								this.obj[i].addEventListener("click",callback,false);
							};
						}else{
							this.obj.addEventListener("click",callback,false);
						}

					}else{
						if(this.obj.length>0){

							for (var i=0;i<this.obj.length;i++) {
								if(this.obj[i])
									this.obj[i].attachEvent=("onclick",callback);
								}
						}else{
							this.obj.attachEvent=("onclick",callback);
						}
					}
			}catch(e){
				console.error(e);
			}
			return this;

		},
		detach:function(event){
				try{
					if (/.*(Firefox|Safari|Chrome).*/.exec(window.navigator.userAgent)) {
						if(this.obj.length>0){
							for (var i=0;i<this.obj.length;i++) {

								this.obj[i].removeEventListener(event,$_eventStack[this.obj],false);
							};
						}else{
							this.obj.removeEventListener(event,$_eventStack[this.obj],false);
						}

					}else{
						if(this.obj.length>0){

							for (var i=0;i<this.obj.length;i++) {
								if(this.obj[i])
									this.obj[i].detachEvent("on"+event,$_eventStack[this.obj]);
								}
						}else{
							this.obj.detachEvent("on"+event,$_eventStack[this.obj]);
						}
					}
				}catch(e){
					console.error(e);
				}
			return this;
		},attr:function(propName,value){
			if(!value){
				return this.obj.getAttribute(propName);
			}else{
				this.obj.setAttribute(value);
				return this;
			}
		}
	}
 	window.$_ = function(selectName){return new $_fn(selectName);};//获取智能对象
 	window.$_eventStack={};//记录事件委托关系

///////////////////////////////

设置按钮事件

$_(".btn-big-test").on(‘click‘,function(e){
 		alert($_(this).attr("title"));
 	});

$_("#removetest").on("click",function(){
 		$_(".btn-big-test").detach(‘click‘);
 		alert("事件已移除");
 	});

$_("#addtest").on("click",function(){
                //采用连续调用模式销毁事件和委托新的事件 避免多次调用
 		$_(".btn-big-test").detach(‘click‘).on(‘click‘,function(e){
 			alert(this.className);
 		});
 		alert("事件已添加");
 	});

时间: 2024-10-12 23:27:24

js实现类似jquery基础功能 简单选择器/事件/属性的相关文章

原生JS取代一些JQuery方法的简单实现

原生JS取代一些JQuery方法的简单实现 下面小编就为大家带来一篇原生JS取代一些JQuery方法的简单实现.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 1.选取元素 // jQuery var els = $('.el'); // Native var els = document.querySelectorAll('.el'); // Shorthand var $ = function (el) { return document.querySelect

jQuery基础(三)事件篇

                               jquery学习笔记 1.click与dbclick事件 用交互操作中,最简单直接就是点击操作.jQuery提供了两个方法一个是click方法用于监听用户单击操作,另一个方法是dbclick方法用于监听用户双击操作.这两个方法的用户是类似,下面以click()事件为例 使用上非常简单: 方法一:$ele.click() 绑定$ele元素,不带任何参数一般是用来指定触发一个事件,用的比较少 <div id="test"&

jQuery基础知识&mdash; 获得内容和属性

jQuery拥有可操作HTML元素和属性的方法.   获得内容: text()--设置或返回所选元素的文本内容 html()--设置或返回所选元素的内容(包括HTML标记) val()--设置或返回表单字段的值 获取属性: attr()方法用于获取属性值 例如: 1 $("button").click(function(){ 2 alert($("#w3s").attr("href")); 3 });   jQuery文档操作参考手册 方法 描述

jQuery基础知识— 获得内容和属性

jQuery拥有可操作HTML元素和属性的方法. 获得内容: text()--设置或返回所选元素的文本内容 html()--设置或返回所选元素的内容(包括HTML标记) val()--设置或返回表单字段的值 获取属性: attr()方法用于获取属性值 例如: 1 $("button").click(function(){ 2 alert($("#w3s").attr("href")); 3 }); jQuery文档操作参考手册 方法 描述 add

jQuery的简单用法(jQuery的简介,选择器,属性和css,文档处理)

一.jQuery简介 1.1.  JS库 JavaScript 库封装了很多预定义的对象和实用函数.能帮助使用者建立有高难度交互客户端页面, 并且兼容各大浏览器. 1.2.  当前流行的 JavaScript 库有: ① jQuery ,最流行 ② EXT JS,2.0开始收费 ③ Prototype,对js扩展,框架开发. ④ Dojo ⑤ Bootstrap,来自 Twitter,是目前很受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使

js实现类似百度提示功能

<div> <input id="condition" name="object.name" type="text" onkeyup="doQuery()"/> 这个键盘事件很重要实现动态交互 <div id="div" style="position: absolute;z-index: 100"> <table id="table&

一起写框架-MVC框架-基础功能-简单数据类型参数绑定(六)

功能实现 需求:根据表单的字段名,如果和参数的变量名一致,并且类型兼容,那么将数据自动封装到对应的自动上. 包括的支持的数据类型有: 1.基础数据类型:long.int.double.float.char.byte.boolean.short 2.基础数据类型的包装类:Long.Integer.Double.Float.Character.Byte.Boolean.Short 3.字符串类型:String 这里有一个难点,由于低于JDK1.8的JDK是不支持直接获得参数名的.即使高于JDK1.8

jQuery基础 (一)——样式篇(属性与样式)

一.操作特性的DOM方法主要有3个 getAttribute方法 setAttribute方法 removeAttribute方法 注意:而在jQuery中用一个attr()与removeAttr()就可以全部搞定了,包括兼容问题 二.注意的问题 dom中有个概念的区分:Attribute和Property翻译出来都是“属性”,<js高级程序设计>书中翻译为“特性”和“属性”. [1]简单理解,Attribute就是dom节点自带的属性 例如:html中常用的id.class.title.al

css基础语法,简单选择器,文本样式2018/4/26

MDN-CSS 介绍 MDN-CSS如何工作 MDN-CSS 语法 MDN-选择器 MDN-简单选择器 MDN-属性选择器 MDN-基本文本和字体样式 color font-family font-style font-weight font-size text-align text-decoration text-indent line-height text-shadow 验证 今天代码部分其实比较简单,主要是多尝试,学习之后,回顾以下自己是否已经掌握以下概念: 什么是CSS,CSS是如何工