jquery源码学习--iceDog
/**
* @FileName : iceDog
* @Author : PheonixHkbxoic
* @Mail : hkbxoic@gmail.com
* @DateTime : 2016-04-23 14:55:33
* @Version : v1.0.0
* @Description: Description
*/ (function(window,undefined){
var doc = window.document; var _iceDog = function(selector){
return new _iceDog.fn.init(selector);//每次使用_iceDog对象,都是全新的
}; //原型
_iceDog.fn = _iceDog.prototype = {
//elems : [],//selector? []:_iceDog.prototype,
init : function(selector){
this.elems = [];//初始化容器,每次创建的对象都是全新的 if(selector){
if(typeof selector === 'boolean'){
this.elems.push(selector==true? true:this);
}else if (typeof selector === 'number') {
this.elems.push(selector);
}else if (typeof selector === 'function') {
//用回调函数处理
selector.call(this,this);
}else if (typeof selector === 'string' ){
if(selector.match(/^\#\S{3,}/)){//#id
this.elems.push(doc.getElementById(selector.substring(1)))
}else if (selector.match(/^\.\S{3,}/)) {//.class
var elarr = doc.all;
for (var i = 0; i < elarr.length; i++) {
if (elarr[i].className&&elarr[i].className.indexOf(selector.substring(1))!=-1) {
this.elems.push(elarr[i]);
} }
}else { //a,
var elarr = doc.getElementsByTagName(selector);
for (var i = 0; i < elarr.length; i++) {
this.elems.push(elarr[i]);
}
}
}else if (selector.nodeType) {
this.elems.push(selector);
} return this;
}else{//handle $(),$(""), $(null), $(undefined), $(false)
return this;
} },
css : function(attr,value){
if (arguments.length == 1) {
var attrvalue = [];
for (var i = 0; i < this.elems.length; i++) {
attrvalue[i] = this.elems[i].style[attr] ;
}
return attrvalue;
}else if (arguments.length == 2) {
for (var i = 0; i < this.elems.length; i++) {
this.elems[i].style[attr] = value;
}
return this;
}else{
throw new Error('the length of css arguments is between 1 and 2 !');
}
},
each:function(callback,args){//应该用回调函数
return _iceDog.each(this.elems,callback,args);
}
}; //原型传递
_iceDog.fn.init.prototype = _iceDog.prototype; /**
* 将要添加的静态方法或属性,复制给_iceDog 类
* 将要添加的对象方法或属性,复制给_iceDog.fn,即_iceDog.prototype原型,那么_iceDog 对象也就拥有了这些方法和属性
*/
_iceDog.extend = _iceDog.fn.extend = function(){
var target = arguments[0]||{};
for(name in target){
this[name] = target[name];
}
return target;
}; //_iceDog 类要添加的静态方法或属性
_iceDog.extend({
version:'iceDog v1.0.0',
showVersion:function(){
alert(this.version);
return this.version;
},
each:function(obj,callback,args){//应该用回调函数
var name,length = obj.length;
for(name in obj){
if(callback.call(obj[name],name,obj[name],args)===false){
break;
}
}
}
}); //_iceDog对象的属性或方法
_iceDog.fn.extend({
elems:[],
get:function(index){
return arguments.length==1?this.elems[index]:this.elems;
},
show:function(){
for(var i=0;i<this.elems.length;i++){
this.elems[i].style.display = 'block';
}
return this;
},
hide:function(){
for(var i=0;i<this.elems.length;i++){
this.elems[i].style.display = 'none';
}
return this;
},
addClass:function(className){
for(var i=0;i<this.elems.length;i++){
this.elems[i].className += ' '+className;
}
return this;
},
removeClass:function(className){
for(var i=0;i<this.elems.length;i++){
var clzz = this.elems[i].className;
clzz = clzz.replace(new RegExp(className),'');
clzz = clzz.replace(/\ $/,'');
this.elems[i].className= clzz;
}
return this;
},
val:function(val){ //获取或设置表单元素值
if (arguments.length==1) {
for(var i=0;i<this.elems.length;i++){
if(this.elems[i].hasAttribute('value')){
this.elems[i].value = val;
}
}
return this;
}
var values = [];
for(var i=0;i<this.elems.length;i++){
if(this.elems[i].hasAttribute('value')){
var value = this.elems[i].value;
if(value){
values.push(value);
}
}
}
return values;
},
text:function(textValue){ //获取或设置文本节点内容
if (arguments.length==1) {
for(var i=0;i<this.elems.length;i++){
this.elems[i].appendChild(doc.createTextNode(textValue));
}
return this;
}
var texts = [];
for(var i=0;i<this.elems.length;i++){
if(this.elems[i].nodeType == 1){//是元素节点,才有文本子节点
var text = [];
var childNodes = this.elems[i].childNodes;
for (var i = 0; i < childNodes.length; i++) {
if(childNodes[i].nodeType == 3){
//FireFox浏览器,空格和回车会认为是文本节点。需额外处理
childNodes[i].nodeValue = childNodes[i].nodeValue.replace(/\s+/,'');
if(childNodes[i].nodeValue){
text.push(childNodes[i].nodeValue);
}
}
}
texts.push(text);
}
}
return texts;
},
html:function(tag){ //获取或设置节点内容
if (arguments.length==1) {
for(var i=0;i<this.elems.length;i++){
this.elems[i].innerHTML=tag;
}
return this;
}
for(var i=0;i<this.elems.length;i++){
this.elems[i] = this.elems[i].innerHTML;
}
return this.elems;
},
append:function(node,createText){
if (arguments.length!=0) {
if(!node.nodeType){ //如果不是节点
if(createText&&createText==true){
node = doc.createTextNode(node); //创建文本节点
}else{
node = doc.createElement(node); //创建元素节点
}
}
for(var i=0;i<this.elems.length;i++){
this.elems[i].appendChild(node);
} //对于<div class='clzz'></div>该如何处理?
}
return this;
}
}); window.$ = window.iceDog = _iceDog;
})(window);
/*
console.log(_iceDog());
console.log(_iceDog('#box'));
console.log(_iceDog('#box').css('color','red').css('color'));
console.log(_iceDog);
// console.log(_iceDog.show());//不能运行。。。
console.log(_iceDog('#pox').show());
console.log(_iceDog('p').show()); console.log(_iceDog('.boxpox'));
console.log(_iceDog('.beblue').css('color','blue').css('color'));
*/ /*
(function(window){
var doc = window.document;
_iceDog = function(selector){
var obj = {
elems : selector? []:_iceDog.prototype,
init : function(selector){
if(selector){
if(selector.match(/^\#\S{3,}/)){//#id
this.elems.push(doc.getElementById(selector.substring(1)))
}else if (selector.match(/^\.\S{3,}/)) {//.class
var elarr = doc.all;
for (var i = 0; i < elarr.length; i++) {
if (elarr[i].className&&elarr[i].className.indexOf(selector.substring(1))!=-1) {
this.elems.push(elarr[i]);
} }
}else { //a,<a>
var elarr = doc.getElementsByTagName(selector);
for (var i = 0; i < elarr.length; i++) {
this.elems.push(elarr[i]);
}
}
return this;
}else{
return this;
} },
css : function(attr,value){
if (arguments.length == 1) {
var attrvalue = [];
for (var i = 0; i < this.elems.length; i++) {
attrvalue[i] = this.elems[i].style[attr] ;
}
return attrvalue;
}else if (arguments.length == 2) {
for (var i = 0; i < this.elems.length; i++) {
this.elems[i].style[attr] = value;
}
return this;
}else{
throw new Error('the length of css arguments is between 1 and 2 !');
}
},
show:function(){
return this.elems;
},
each:function(fun){//应该用回调函数
for (var i = 0; i < this.elems.length; i++) {
alert(this.elems[i]);
}
}
};
_iceDog.prototype = obj.init.prototype;//_iceDog.prototype = obj.init.prototype = obj; return obj.init(selector);
};
window.$ = window.iceDog = _iceDog;
})(window);
*/
jquery源码学习--iceDog的更多相关文章
- jquery源码学习笔记三:jQuery工厂剖析
jquery源码学习笔记二:jQuery工厂 jquery源码学习笔记一:总体结构 上两篇说过,query的核心是一个jQuery工厂.其代码如下 function( window, noGlobal ...
- jquery源码学习(一)——jquery结构概述以及如何合适的暴露全局变量
jQuery 源码学习是对js的能力提升很有帮助的一个方法,废话不说,我们来开始学习啦 我们学习的源码是jquery-2.0.3已经不支持IE6,7,8了,因为可以少学很多hack和兼容的方法. jq ...
- jQuery源码学习感想
还记得去年(2015)九月份的时候,作为一个大四的学生去参加美团霸面,结果被美团技术总监教育了一番,那次问了我很多jQuery源码的知识点,以前虽然喜欢研究框架,但水平还不足够来研究jQuery源码, ...
- 读艾伦的jQuery的无new构建,疑惑分析——jquery源码学习一
背景: 有心学习jquery源码,苦于自己水平有限,若自己研究,耗时耗力,且读懂之日无期. 所以,网上寻找高手的源码分析.再经过自己思考,整理,验证.以求有所收获. 此篇为读高手艾伦<jQuer ...
- jquery 源码学习(一)
从上边的注释看,jQuery的源码结构相当清晰.条理,不像代码那般晦涩和让人纠结 1. 总体架构 1.1 自调用匿名函数 self-invoking anonymous function 打开jQ ...
- jquery 源码学习(*)
最近在做日志统计程序,发现对方的程序是在Jquery基础上进行开发的,而公司的网站的框架是prototype.而且我也早就想了解一下Jquery源码,故决定研究Jquery源码,模拟它的方法 Jq ...
- 菜鸟的jQuery源码学习笔记(前言)
前言 相信任何一名前端开发人员或者是前端爱好者都对jQuery不陌生.jQuery简单易用,功能强大,特别是拥有良好的浏览器兼容性,大大降低了前端开发的难度,使得前端开发变得“平易近人起来”.自从本人 ...
- jQuery源码学习扒一扒jQuery对象初使化
神奇的jQuery可以这样玩jQuery("#id").css()或 jQuery("#id").html() 这么玩jQuery("#id" ...
- jQuery源码学习笔记一
学习jQuery源码,我主要是通过妙味视频上学习的.这里将所有的源码分析,还有一些自己弄懂过程中的方法及示例整理出来,供大家参考. 我用的jquery v2.0.3版本. var rootjQuery ...
随机推荐
- JAVA继承时this和super关键字
JAVA继承时this和super关键字 本文主要讨论在方法前使用this或super关键字时,编译器在什么地方查找对应的函数. 在子类中指定this关键字.首先在本类中查找,如果本类中找不到,再在父 ...
- ramBufferSizeMB
索引算法确定 的情况下,影响Lucene索引速度的因素 MaxBufferedDocs这个参数默认是disabled的,因为Lucene中还用另外一个参数(RAMBufferSizeMB)控制这个bu ...
- spring错误<context:property-placeholder>:Could not resolve placeholder XXX in string value XXX
spring同时集成redis和mongodb时遇到多个资源文件加载的问题 这两天平台中集成redis和mongodb遇到一个问题 单独集成redis和单独集成mongodb时都可以正常启动程序,但是 ...
- Delphi 中 paramstr 的用法及参数意义
原型 function paramstr(i:index):string 对于任何application paramstr(0)都默认代表的是应用程序的绝对路径.那 ...
- Js 时间与字符串转示例
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- fatal: Not a git repository (or any of the parent directories): .git
$ git remote add origin https://github.com/heyuanchao/YouxibiClient.gitfatal: Not a git repository ( ...
- cookie机制和session机制的原理和区别[转]
一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于在服务器端保持状态的 ...
- 06-模仿系统的UIImageView
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- 你不知道的JavaScript 二
词法作用域 上次说到作用域,将其定义为一套规则,这套规则用来管理引擎如何在当前作用 域以及嵌套的子作用域中根据标识符名称进行变量查找. 作用域共有两种主要的工作模型.第一种是最为普遍的,被大多数编程语 ...
- hadoop2.5.1搭建(一)
1.1配置 1.1.1修改hosts vi /etc/hosts 192.168.220.64 cluster4 192.168.220.63 cluster3 1.2安装jdk rpm安装 rpm ...