模拟jquery封装选择器
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title></title>
<script>
//测试模拟tquery选择器封装的效果 function btn_click(){
console.log($("#btnName").val());
} function btn_setValue(){
$("#btnName").val("hello world");
} /*封装的id、class、元素选择器的选择操作*/
var $=function(selector){
this.tqObject=new TQObject();
//id选择器的操作
if(selector.substring(0,1)=="#"){
var elem=document.getElementById(selector.substring(1,selector.length));
tqObject.data.push(elem);//存入tqObject对象的数组中
}else if(selector.substring(0,1)=='.'){
//类选择器的操作
var elems=document.getElementsByTagName('*');//获取页面中的所有元素
var className=selector.substring(1);//获取className
var reg=new RegExp("(^|\\s)"+className+"($|\\s)");//定义正则表达式
for(var i=0;i<elems.length;i++){
if(reg.test(elems[i].className)){//如果匹配上,则存入tqObject对象的数组中
this.tqObject.data.push(elems[i]);
}
}
}else{
//标签选择器
var elems=document.getElementsByTagName(selector);
this.tqObject.data=elems;
}
return tqObject;
} /*封装选择器
*封装TQObject对象,提供一个数组元素,以及若干自定义的操作方法
*通过封装$("#id|.class|element")来获取元素
*/ /*封装TQObject对象*/
var TQObject=function(){
this.data=[];
} TQObject.prototype={
//TQObject添加原型方法 //返回data数组的个数
size:function(){
return this.data.length;
}, //封装innerHTML
html:function(content){
if(content){
//为元素设置html值(xx.innerHTML="")
for(var i=0;i<this.data.length;i++){
//innerHTML兼容性比较好
this.data[i].innerHTML=content;
}
}else{
//获取html值(return xx.innerHTML)
if(this.data.length!=0){
return this.data[0].innerHTML;
}
return;
}
}, //获得/设置value属性
val:function(value){
if(value){
//为value属性设置值
for(var i=0;i<this.data.length;i++){
this.data[i].value=value;
//this.data[i].setAttribute("value",value);
}
return this;//为了使用连缀的效果
}else{
if(this.data.length!=0){
return this.data[0].value;
//return this.data[0].getAttribute("value");
}
}
}, //获得/设置任意属性
attr:function(name,value){
//如果有两个参数
if(name && value){
for(var i=0;i<this.data.length;i++){
//这里只能处理出现在标签中的属性
this.data[i].setAttribute(name,value);
}
return this;
}else if(name){
if(this.data.length!=0){
return this.data[0].getAttribute(name);
}
}
}, //追加样式
addClass:function(className){
for(var i=0;i<this.data.length;i++){
var elem=this.data[i];
if(elem.getAttribute("class")){
//如果有class属性了
var oldClassName=elem.getAttribute("class");
var newClassName=oldClassName+""+className;
elem.setAttribute("class",newClassName);
}else{
//设置class属性
elem.setAttribute("class",className);
}
}
}, //移除样式
/*removeClass(className) 移除指定样式
removeClass() 移除所有样式
*/
removeClass:function(className){
if(className){
//删除指定名称的样式
//<input class="a b c"/>
for(var i=0;i<this.data.length;i++){
var arr=this.data[i].getAttribute("class").split(" ");//得到一个数组
var newClassName="";
for(var j=0;j<arr.length;j++){
if(arr[j]==className){
continue;
}
newClassName+=arr[j]+" ";
newClassName=newClassName.substring(0,newClassName.length-1);
this.data[i].setAttribute("class",newClassName);
}
return this;
}
}else{
//移除所有类样式
for(var i=0;i<this.data.length;i++){
this.data[i].setAttribute("class","");
}
return this;
}
}
};
</script>
</head> <body>
<div class="redBorder" id="myDiv"></div>
<div class="redBorder"></div>
<div class="grayBorder"></div>
<input type='text' id="btnName"/>
<input type="button" value="测试" onclick="btn_click()"/>
<input type="button" value="设置值" onclick="btn_setValue()"/>
</body>
</html>
模拟jquery封装选择器的更多相关文章
- ajx技术解析以及模拟jQuery封装
1.后台处理程序 <%@ page language="java" contentType="text/html; charset=UTF-8" page ...
- js框架封装,模拟jQuery封装
模拟jQuery框架,利用原生的js技术,封装一个js框架,以加深对jQuery的常用api的使用和面向对象原理的理解:一:结构部分首先利用闭包,构造一个自执行函数,然后利用选择器函数Sizzle,获 ...
- 模拟jquery的$()选择器的实现
<html> <head> </head> <body> <div id="div1">div1</div> ...
- javascript模拟jQuery封装委托事件,兼容IE
var $ = function(id){ var dom = document.getElementById(id); return { on:function(eventType,element, ...
- 原生JS模拟jQuery $
模拟jQuery的$选择器 在获取元素的时候使用ID选择器,返回的是一个对象:使用类选择器或者标签选择器返回可能是一组元素:将获取到的一个或一组元素进行一个简易的封装封装成一个TQObject 什么是 ...
- 模拟jQuery简单封装ajax
/*模拟jQuery的写法 (简单写法)*/ var $={}; /*ajax*/ $.ajax = function (options) { /* * 请求 * 1.请求接口 type get po ...
- 仿照jquery封装一个自己的js库(一)
所谓造轮子的好处就是复习知识点,加深对原版jquery的理解. 本文系笔者学习jquery的笔记,记述一个名为"dQuery"的初级版和缩水版jquery库的实现.主要涉及知识点包 ...
- 仿照jquery封装一个自己的js库
所谓造轮子的好处就是复习知识点,加深对原版jquery的理解.本文系笔者学习jquery的笔记,记述一个名为"dQuery"的初级版和缩水版jquery库的实现.主要涉及知识点包括 ...
- 模拟jQuery库
用js模拟jQuery方法,体会封装思想 <!DOCTYPE html><html><head><meta charset="UTF-8" ...
随机推荐
- CC Arithmetic Progressions (FFT + 分块处理)
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove 题目:给出n个数,选出三个数,按下标顺序形成等差数 ...
- tomcat加入系统服务
在实际的项目开发中web容器等都是安装在客户方的服务器上的,在实现tomcat的集群时为了实现防止客户重启的机器造成服务器的关闭因此需要将web容器加入到系统服务中,在系统启动的时候自动启动服务,以t ...
- 快速入门cocos2d-x jsbinding
如果你是一个cocos2d-x的老手,那你可以忽略这篇博文,如果你是一个接触过javascript,想通过HTML5做游戏的,但是苦于不知道如何下手,那么这篇博文可能会帮到你. cocos2dx-js ...
- 一次java程序的重构
// com口操作类 package xyz.game; class ComOpera { public void openPort() throws Exception {...} // 打开com ...
- 关于接口使用getType的方法的问题
C#代码如下: public interface IConfigInfo { } public class A : IConfigInfo { } public c ...
- css3 之表格隔行分色显示
<html> <head> <title></title> <style type="text/css"> table{ ...
- CRegKey 注册表操作
CRegKey 注册表操作 标签: accessnulluserpathbyteie 2011-11-03 13:55 3477人阅读 评论(0) 收藏 举报 分类: win32(7) 1.简介 ...
- Smarty include使用
{include} {include}用于载入其他模板到当前模板中. 在包含模板中可用的变量,载入后在当前模板仍然可用. {include}必须设置file 属性,设置载入的文件资源路径. 设置了可选 ...
- 设计模式(十一):FACADE外观模式 -- 结构型模式
1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性.例子1:一个电源总开关可以控制四盏灯.一个风扇 ...
- CSS3/HTML5实现漂亮的分步骤注册登录表单
分步骤的登录注册表单现在也比较多,主要是能提高用户体验,用户可以有选择性的填写相应的表单信息,不至于让用户看到一堆表单望而却步.今天和大家分享的就是一款基于HTML5和CSS3的分步骤注册登录表单,外 ...