<!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封装选择器的更多相关文章

  1. ajx技术解析以及模拟jQuery封装

    1.后台处理程序 <%@ page language="java" contentType="text/html; charset=UTF-8" page ...

  2. js框架封装,模拟jQuery封装

    模拟jQuery框架,利用原生的js技术,封装一个js框架,以加深对jQuery的常用api的使用和面向对象原理的理解:一:结构部分首先利用闭包,构造一个自执行函数,然后利用选择器函数Sizzle,获 ...

  3. 模拟jquery的$()选择器的实现

    <html> <head> </head> <body> <div id="div1">div1</div> ...

  4. javascript模拟jQuery封装委托事件,兼容IE

    var $ = function(id){ var dom = document.getElementById(id); return { on:function(eventType,element, ...

  5. 原生JS模拟jQuery $

    模拟jQuery的$选择器 在获取元素的时候使用ID选择器,返回的是一个对象:使用类选择器或者标签选择器返回可能是一组元素:将获取到的一个或一组元素进行一个简易的封装封装成一个TQObject 什么是 ...

  6. 模拟jQuery简单封装ajax

    /*模拟jQuery的写法 (简单写法)*/ var $={}; /*ajax*/ $.ajax = function (options) { /* * 请求 * 1.请求接口 type get po ...

  7. 仿照jquery封装一个自己的js库(一)

    所谓造轮子的好处就是复习知识点,加深对原版jquery的理解. 本文系笔者学习jquery的笔记,记述一个名为"dQuery"的初级版和缩水版jquery库的实现.主要涉及知识点包 ...

  8. 仿照jquery封装一个自己的js库

    所谓造轮子的好处就是复习知识点,加深对原版jquery的理解.本文系笔者学习jquery的笔记,记述一个名为"dQuery"的初级版和缩水版jquery库的实现.主要涉及知识点包括 ...

  9. 模拟jQuery库

    用js模拟jQuery方法,体会封装思想 <!DOCTYPE html><html><head><meta charset="UTF-8" ...

随机推荐

  1. osgi与webservice

    osgi简介: http://osgia.com/ http://blog.csdn.net/xiaokui008/article/details/9662933 http://wdhdd889.it ...

  2. cocoapods出现Diff: /../Podfile.lock: No such file or directory错误

    第一种解决方法: 关闭Xcode,重新执行pod install,之后再重新打开Xcode运行. 第二种解决方法: 删除以下文件: xcworkspacePodfile.lockPods文件夹~/Li ...

  3. pod install后出现: [!] `<PBXResourcesBuildPhase UUID=`xxxx`>` attempted to initialize an object with an unknown UUID

    [!] `<PBXResourcesBuildPhase UUID=`xxx`>` attempted to initialize an object with an unknown UU ...

  4. sql server使用说明

    什么是sql server? SqlServer是微软的一款数据库系统产品. 是DBMS中的一种. 当每一个数据库安装到每一台电脑后,都会与计算机名称(有的是IP地址)关联.因为服务器用途的电脑不能经 ...

  5. 搭建ngrok服务器(ubuntu 14)-- 微信 80端口和IPC备案限制解决方案

    概述: ngrok其实这东西,我也不是很懂,所以也直接跟大家说,这就是个类似花生壳的东西. 简单来说,它就好像把我们内网自己使用的电脑和服务器用vpn连接起来,然后你的电脑就可以从互联网来访问了,有个 ...

  6. An FPS counter.

    本文由博主(YinaPan)原创,转载请注明出处:http://www.cnblogs.com/YinaPan/p/Unity_FPFCounter.html using UnityEngine; u ...

  7. [译] 什么是移动友好的 - Mobile-friendliness

    什么是移动友好的?   移动友好到底意味着什么取决于您与谁讨论它. 我们不妨这样理解: 移动友好的设计以 表现力, 内容和性能 三方面为目标来改善用户体验.   表现力 - Presentation ...

  8. input 类型为number型时,maxlength不生效?

    input 类型为number型时,maxlength不生效? 可以加oninput属性来控制最大长度:<input id="numInput" type="num ...

  9. IE的有条件注释详解

    IE的有条件注释是一种专有的(因此是非标准的).对常规(X)HTML注释的Miscrosoft扩展.顾名思义,有条件注释使你能够根据条件(比如浏览器版本)显示代码块.尽管是非标准的,但是有条件注释对于 ...

  10. PHPCMSv9 更改后台地址(测试)

    最新发布的PHPCMS V9由于采用了MVC的设计模式,所以它的后台访问地址是固定的,虽然可以通过修改路由配置文件来实现修改,但每次都修改路由配置文件对于我来说有点麻烦了,而且一不小心就会出错.这里使 ...