JQuery作为应用最广的JS库,其最强大的功能之一就是几乎涵盖所有方法的且代码十分简短的选择器功能,我们也可用自己的代码实现此功能,代码逻辑、使用方法与JQuery一致
function ZQuery(arg){
this.elements = []; //存东西
this.domString = ''; //保存字符串标签
if(typeof arg=='function'){
//DOMReady
DOMReady(arg);
}else if(typeof arg=='string'||arg instanceof String){
if(arg.indexOf('<')!=-1){
this.domString = arg;
}else{
//获取元素
this.elements = getEle(arg);
this.length = this.elements.length;
}
}else{
//原生对象-》ZQuery对象
this.elements.push(arg);
this.length = this.elements.length;
}
}
ZQuery.prototype.css = function(name,value){
if(arguments.length==2){
//设置一个样式
for(var i=0;i<this.elements.length;i++){
this.elements[i].style[name] = value;
}
}else{
if(typeof name=='string'){
//获取样式
return getStyle(this.elements[0],name);
}else{
//批量设置样式
var json = name;
for(var name in json){
for(var i=0;i<this.elements.length;i++){
this.elements[i].style[name] = json[name];
}
}
}
}
};
ZQuery.prototype.attr = function(name,value){
if(arguments.length==2){
//设置一个属性
for(var i=0;i<this.elements.length;i++){
this.elements[i].setAttribute(name,value);
}
}else{
if(typeof name=='string'){
//获取属性
return this.elements[0].getAttribute(name);
}else{
//批量设置属性
var json = name;
for(var name in json){
for(var i=0;i<this.elements.length;i++){
this.elements[i].setAttribute(name,json[name]);
}
}
}
}
};
ZQuery.prototype.addClass = function(sClass){
var re = new RegExp('\\b'+sClass+'\\b','g');
for(var i=0;i<this.elements.length;i++){
if(this.elements[i].className){
if(this.elements[i].className.search(re)==-1){
this.elements[i].className += ' '+sClass;
}
}else{
this.elements[i].className = sClass;
}
this.elements[i].className = this.elements[i].className.replace(/^\s+|\s+$/g,'').replace(/\s+/g,' ');
}
return this;
};
ZQuery.prototype.removeClass = function(sClass){
var re = new RegExp('\\b'+sClass+'\\b','g');
for(var i=0;i<this.elements.length;i++){
if(this.elements[i].className){
this.elements[i].className = this.elements[i].className.replace(re,'');
this.elements[i].className = this.elements[i].className.replace(/^\s+|\s+$/g,'').replace(/\s+/g,' ');
if(this.elements[i].className==''){
this.elements[i].removeAttribute('class');
}
}
}
return this;
};
ZQuery.prototype.html = function(value){
if(value||value==''){
//设置
for(var i=0;i<this.elements.length;i++){
this.elements[i].innerHTML = value;
}
}else{
return this.elements[0].innerHTML;
}
};
ZQuery.prototype.val = function(value){
if(value||value==''){
//设置
for(var i=0;i<this.elements.length;i++){
this.elements[i].value = value;
}
}else{
return this.elements[0].value;
}
};
ZQuery.prototype.show = function(){
for(var i=0;i<this.elements.length;i++){
this.elements[i].style.display = 'block';
}
return this;
};
ZQuery.prototype.hide = function(){
for(var i=0;i<this.elements.length;i++){
this.elements[i].style.display = 'none';
}
return this;
};
;'click mouseover mouseout mousedown mouseup mousemove mouseenter mouseleave change keydown keyup contextmenu'.replace(/\w+/g,function(str){
ZQuery.prototype[str] = function(fn){
for(var i=0;i<this.elements.length;i++){
addEvent(this.elements[i],str,fn);
}
};
});
ZQuery.prototype.get = function(n){
for(var i=0;i<this.elements.length;i++){
if(i==n){
return this.elements[i];
}
}
};
ZQuery.prototype.eq = function(n){
for(var i=0;i<this.elements.length;i++){
if(i==n){
return $(this.elements[i]);
}
}
};
ZQuery.prototype.index = function(){
var aSiblings = this.elements[0].parentNode.children;
for(var i=0;i<aSiblings.length;i++){
if(aSiblings[i]==this.elements[0]){
return i;
}
}
};
ZQuery.prototype.hover = function(fn1,fn2){
for(var i=0;i<this.elements.length;i++){
$(this.elements[i]).mouseenter(fn1);
$(this.elements[i]).mouseleave(fn2);
}
};
ZQuery.prototype.toggle = function(){
var args = arguments;
var _this = this;
for(var i=0;i<this.elements.length;i++){
;(function(count){
$(_this.elements[i]).click(function(ev){
args[count%args.length].call(this,ev);
count++;
});
})(0);
}
};
ZQuery.prototype.animate = function(json,options){
for(var i=0;i<this.elements.length;i++){
move(this.elements[i],json,options);
}
};
ZQuery.prototype.appendTo = function(arg){
var aParent = $(arg);
for(var i=0;i<aParent.length;i++){
aParent.get(i).insertAdjacentHTML('beforeEnd',this.domString);
}
return this;
};
ZQuery.prototype.prependTo = function(arg){
var aParent = $(arg);
for(var i=0;i<aParent.length;i++){
aParent.get(i).insertAdjacentHTML('afterBegin',this.domString);
}
return this;
};
ZQuery.prototype.insertAfter = function(arg){
var aParent = $(arg);
for(var i=0;i<aParent.length;i++){
aParent.get(i).insertAdjacentHTML('afterEnd',this.domString);
}
return this;
};
ZQuery.prototype.insertBefore = function(arg){
var aParent = $(arg);
for(var i=0;i<aParent.length;i++){
aParent.get(i).insertAdjacentHTML('beforeBegin',this.domString);
}
return this;
};
ZQuery.prototype.remove = function(){
var oParent = this.elements[0].parentNode;
for(var i=0;i<this.elements.length;i++){
oParent.removeChild(this.elements[i]);
}
return this;
};
function $(arg){
return new ZQuery(arg);
};
$.ajax = function(json){
ajax(json);
};
$.jsonp = function(json){
jsonp(json);
};
$.fn = ZQuery.prototype;
$.fn.extend = function(json){
for(var name in json){
ZQuery.prototype[name] = json[name];
}
};
function json2url(json){
var arr = [];
for(var name in json){
arr.push(name+'='+encodeURIComponent(json[name]));
}
return arr.join('&');
}
function ajax(json){
json = json||{};
if(!json.url)return;
json.type = json.type||'get';
json.timeout = json.timeout||15000;
json.data = json.data||{};
json.data.t = Math.random();
if(window.XMLHttpRequest){
var oAjax = new XMLHttpRequest();
}else{
var oAjax = new ActiveXObject('Microsoft.XMLHTTP');
}
switch(json.type.toLowerCase()){
case 'get':
oAjax.open('GET',json.url+'?'+json2url(json.data),true);
oAjax.send();
break;
case 'post':
oAjax.open('POST',json.url,true);
oAjax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
oAjax.send(json2url(json.data));
break;
default:
oAjax.open('GET',json.url+'?'+json2url(json.data),true);
oAjax.send();
break;
}
json.loading&&json.loading();
json.timer = setTimeout(function(){
oAjax.onreadystatechange = null;
json.error&&json.error('网络超时。');
},json.timeout);
oAjax.onreadystatechange = function(){
if(oAjax.readyState==4){
clearTimeout(json.timer);
if(oAjax.status>=200&&oAjax.status<300||oAjax.status==304){
json.success&&json.success(oAjax.responseText);
}else{
json.error&&json.error(oAjax.status);
}
}
};
}
function jsonp(json){
json = json||{};
if(!json.url)return;
json.timeout = json.timeout||15000;
json.cbName = json.cbName||'cb';
json.data = json.data||{};
json.data[json.cbName] = 'show'+Math.random();
json.data[json.cbName] = json.data[json.cbName].replace('.','');
json.timer = setTimeout(function(){
window[json.data[json.cbName]] = function(res){
oHead.removeChild(oS);
json.error&&json.error('网络超时!');
}
},json.timeout);
window[json.data[json.cbName]] = function(res){
clearTimeout(json.timer);
oHead.removeChild(oS);
json.success&&json.success(res);
}
var oHead = document.getElementsByTagName('head')[0];
var oS = document.createElement('script');
oS.src = json.url+'?'+json2url(json.data);
oHead.appendChild(oS);
}
function getStyle(obj,sName){
return (obj.currentStyle||getComputedStyle(obj,false))[sName];
}
function addEvent(obj,sEv,fn){
if(obj.addEventListener){
obj.addEventListener(sEv,function(ev){
var oEvent = ev||event;
if(fn.call(obj,oEvent)==false){
oEvent.cancelBubble = true;
oEvent.preventDefault&&oEvent.preventDefault();
}
},false);
}else{
obj.attachEvent('on'+sEv,function(){
var oEvent = ev||event;
if(fn.call(obj,oEvent)==false){
oEvent.cancelBubble = true;
return false;
}
});
}
}
function DOMReady(fn){
if(document.addEventListener){
addEvent(document,'DOMContentLoaded',function(){
fn&&fn();
});
}else{
addEvent(document,'onreadystatechange',function(){
if(document.readyState=='complete'){
fn&&fn();
}
});
}
}
function getByClass(oParent,sClass){
if(oParent.getElementsByClassName){
return oParent.getElementsByClassName(sClass);
}else{
var aResult = [];
var aEle = oParent.getElementsByTagName('*');
var re = new RegExp('\\b'+sClass+'\\b','g');
for(var i=0;i<aEle.length;i++){
if(aEle[i].className.search(re)!=-1){
aResult.push(aEle[i]);
}
}
return aResult;
}
}
function getByStr(aParent,str){
var aChild = [];
//遍历父级
for(var i=0;i<aParent.length;i++){
switch(str.charAt(0)){
case '#':
//#id
aChild.push(document.getElementById(str.substring(1)));
break;
case '.':
//.class
var aEle = getByClass(aParent[i],str.substring(1));
for(var j=0;j<aEle.length;j++){
aChild.push(aEle[j]);
}
break;
default:
if(/^\w+\.\w+$/.test(str)){
//筛选
//li.on
var arr = str.split('.');
var re = new RegExp('\\b'+arr[1]+'\\b','g');
var aEle = aParent[i].getElementsByTagName(arr[0]);
for(var j=0;j<aEle.length;j++){
if(aEle[j].className.search(re)!=-1){
aChild.push(aEle[j]);
}
}
}else if(/^\w+\[\w+\=\w+\]$/.test(str)){
//属性
var arr = str.split(/\[|\=|\]/);
var aEle = aParent[i].getElementsByTagName(arr[0]);
for(var j=0;j<aEle.length;j++){
if(aEle[j].getAttribute(arr[1]) == arr[2]){
aChild.push(aEle[j]);
}
}
}else if(/^\w+\:\w+(\(\d+\))?$/.test(str)){
var arr = str.split(/\:|\(|\)/);
var aEle = aParent[i].getElementsByTagName(arr[0]);
switch(arr[1]){
case 'first':
aChild.push(aEle[0]);
break;
case 'last':
aChild.push(aEle[aEle.length-1]);
break;
case 'even':
for(var j=0;j<aEle.length;j+=2){
aChild.push(aEle[j]);
}
break;
case 'odd':
for(var j=1;j<aEle.length;j+=2){
aChild.push(aEle[j]);
}
break;
case 'eq':
aChild.push(aEle[arr[2]]);
break;
case 'lt':
for(var j=0;j<arr[2];j++){
aChild.push(aEle[j]);
}
break;
case 'gt':
for(var j=parseInt(arr[2])+1;j<aEle.length;j++){
aChild.push(aEle[j]);
}
break;
}
}else{
//标签
var aEle = aParent[i].getElementsByTagName(str);
for(var j=0;j<aEle.length;j++){
aChild.push(aEle[j]);
}
}
break;
}
}
return aChild;
}
function getEle(str){
var arr = str.replace(/^\s+|\s+$/g,'').split(/\s+/);
var aParent = [document];
var aChild = [];
for(var i=0;i<arr.length;i++){
aChild = getByStr(aParent,arr[i]);
//这一次获取到的子级,是下一次获取的父级
aParent = aChild;
}
return aChild;
}
function move(obj,json,options){
clearInterval(obj.timer);
options=options || {};
options.easing=options.easing|| 'ease-out';
options.duration=options.duration || 800;
var count=Math.floor(options.duration/30);
var start={};
var dis={};
for(var name in json){
start[name]=parseFloat(getStyle(obj,name));
dis[name]=json[name]-start[name];
}
var n=0;
obj.timer=setInterval(function(){
n++;
for(var name in json){
switch(options.easing){
case 'linear':
var a=n/count;
var cur=start[name]+dis[name]*a;
break;
case 'ease-in':
var a=n/count;
var cur=start[name]+dis[name]*a*a*a;
break;
case 'ease-out':
var a=1-n/count;
var cur=start[name]+dis[name]*(1-a*a*a);
break;
}
if(name=='opacity'){
obj.style.opacity=cur;
obj.style.filter='alpha(opacity:'+cur*100+')';
}else{
obj.style[name]=cur+'px';
}
}
if(n==count){
clearInterval(obj.timer);
options.complete && options.complete();
}
},30);
}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# js
# 选择器
# js实现圆形菜单选择器
# 泛谈JS逻辑判断选择器 || &&
# 了解JavaScript中的选择器
# Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能
# vue2.0.js的多级联动选择器实现方法
# 浅谈JS中的常用选择器及属性、方法的调用
# Javascript封装id、class与元素选择器方法示例
# 浅谈js中用$(#ID)来作为选择器的问题(id重复的时候)
# js实现精确到秒的日期选择器完整实例
# js实现类选择器和name属性选择器的示例步骤
# 自己的
# 遍历
# 最广
# 其最
# children
# hover
# index
# aSiblings
# parentNode
# _this
# count
# ev
# toggle
# args
# eq
# mouseenter
# mouseleave
# change
# mousedown
相关文章:
网站制作说明怎么写,简述网页设计的流程并说明原因?
购物网站制作公司有哪些,哪个购物网站比较好?
建站主机选虚拟主机还是云服务器更好?
,制作一个手机app网站要多少钱?
ui设计制作网站有哪些,手机UI设计网址吗?
如何在IIS7上新建站点并设置安全权限?
如何获取PHP WAP自助建站系统源码?
建站之星后台管理:高效配置与模板优化提升用户体验
建站主机系统SEO优化与智能配置核心关键词操作指南
seo网站制作优化,网站SEO优化步骤有哪些?
网站制作壁纸教程视频,电脑壁纸网站?
油猴 教程,油猴搜脚本为什么会网页无法显示?
如何在香港免费服务器上快速搭建网站?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
重庆市网站制作公司,重庆招聘网站哪个好?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
网站图片在线制作软件,怎么在图片上做链接?
家具网站制作软件,家具厂怎么跑业务?
长沙企业网站制作哪家好,长沙水业集团官方网站?
宝塔新建站点报错如何解决?
魔方云NAT建站如何实现端口转发?
网站制作公司排行榜,四大门户网站排名?
建站之星Pro快速搭建教程:模板选择与功能配置指南
江苏网站制作公司有哪些,江苏书法考级官方网站?
制作网站的基本流程,设计网站的软件是什么?
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
如何快速搭建支持数据库操作的智能建站平台?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
如何快速上传建站程序避免常见错误?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
建站主机与虚拟主机有何区别?如何选择最优方案?
大连 网站制作,大连天途有线官网?
制作销售网站教学视频,销售网站有哪些?
如何快速配置高效服务器建站软件?
建站之星3.0如何解决常见操作问题?
建站上市公司网站建设方案与SEO优化服务定制指南
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
子杰智能建站系统|零代码开发与AI生成SEO优化指南
建站主机选哪种环境更利于SEO优化?
建站之星安装后界面空白如何解决?
设计网站制作公司有哪些,制作网页教程?
如何在西部数码注册域名并快速搭建网站?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
如何快速搭建高效可靠的建站解决方案?
如何续费美橙建站之星域名及服务?
如何在宝塔面板中修改默认建站目录?
如何快速完成中国万网建站详细流程?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
制作门户网站的参考文献在哪,小说网站怎么建立?
*请认真填写需求信息,我们会在24小时内与您取得联系。