验证中...
本周日【珠海源创会】一起聊聊:PingCAP分布式事务、支付宝移动端实践、GSBN技术框架选型,点此报名占座
jquery.js
原始数据 复制代码
(function (w) {
// 定义本地jKuery对象
// J(f) J("#id") J("a")
var jKuery = function (selector) {
// 创建jKuery对象
return new jKuery.fn.ini(selector);
};
// 为jKuery原型对象初始化,并将原型赋值给fn
jKuery.fn = jKuery.prototype = {
constructor: jKuery
// 定义初始化函数
, ini: function (selector) {
// 如果传入的是空字符串 返回this目的在于链式的实现
if (!selector) return this;
// 如果传入的是一个函数,就为onload加载事件
if (typeof selector === "function") {
var oldFunc = w.onload;
if (typeof oldFunc === "function") {
w.onload = function () {
oldFunc();
selector();
};
} else {
w.onload = selector;
}
return this;
}
// 如果传进来的是DOM对象,将其转换为jk对象,实际就是放在this的数组中
if (selector.nodeType) {
this[0] = selector;
this.length = 1;
return this;
}
// 如果创建的是字符串 html文本或选择器
if (typeof selector === "string") {
// 如果是html字符串
if (false) {
} else {
// 这里考虑id和标签
return get.call(this, selector);
}
}
}
// jk对象的map遍历
, map: function (callback) {
var l, arr = [], temp;
if (l = this.length) {
for (var i = 0; i < l; i++) {
temp = callback.call(this[i], this[i], i);
if (temp) {
arr[arr.length] = temp;
}
}
return arr.concat.apply([], arr);
}
}
// jk对象的each遍历
, each: function (callback) {
var l;
if (l = this.length) {
for (var i = 0; i < l; i++) {
if (callback.call(this[i], this[i], i) === "false") {
break;
}
}
}
}
// css方法
, css: function (name, value) {
// 首先判断是否有参数
if (name && value) {
this.each(function () {
this.style[name] = value;
});
} else {
// 如果是js对象
if (typeof name === "object") {
for (var key in name) {
this.each(function () {
this.style[key] = name[key];
});
}
}
}
return this;
}
// text方法
, text: function (value) {
// 保证是字符串
if (value) {
// 设置
this.each(function () {
// 判断有没有子元素
if (!this.lastChild) {
// 没有子元素
this.appendChild(document.createTextNode(value));
} else {
if (this.childNodes.length == 1 && this.lastChild.nodeType == 3) {
this.lastChild.nodeValue = value;
} else {
// 简单点,移除所有,再加进来
var nodes = this.childNodes;
var p = this.parentNode;
for (var i = 0; i < nodes.length; i++) {
p.removeChild(nodes[i]);
}
this.appendChild(document.createTextNode(value));
}
}
});
} else {
// 取值
// 获得所有的文本拼接成的字符串
var res = [];
// 递归获得元素中的所有文本
// 陷阱,递归实现的时候,变量i容易出现问题,应注意
(function (elem) {
for (var i = 0; i < elem.childNodes.length; i++) {
if (elem.childNodes[i].nodeType == 1) {
arguments.callee(elem.childNodes[i]);
} else if (elem.childNodes[i].nodeType == 3) {
res[res.length] = elem.childNodes[i].nodeValue;
}
}
})(this[0]);
return res.concat.apply([], res).join("");
}
return this;
}
// html方法
, html: function (value) {
if (value) {
// 设置
this.each(function () {
this.innerHTML = value;
});
} else {
// 得到
return this[0].innerHTML;
}
return this;
}
// attr方法
, attr: function (name, value) {
if (name && !value) {
// 得到数据
return this[0].getAttribute(name);
} else {
// 设置
this.each(function () {
// this[name] = value;
this.setAttribute(name, value);
});
}
return this;
}
// val方法
, val: function (value) {
if (value) {
this.each(function () {
this.value = value;
});
} else {
return this[0].value;
}
return this;
}
// addClass
, addClass: function (value) {
if (!value) return this;
// 追加类样式,有则忽略,无则追加
var classNames = value.replace(/\s+/, " ").split(" ");
this.each(function () {
var className = this.className;
for (var i = 0; i < classNames.length; i++) {
if (!new RegExp(classNames[i]).test(className)) {
className += " " + classNames[i];
}
}
className = jKuery.trim(className.replace(/\s+/, " "));
this.className = className;
});
}
// removeClass
, removeClass: function (value) {
var classNames = value.replace(/\s+/, " ").split(" ");
this.each(function () {
var cs = [];
var c = this.className.replace(/\s+/, " ").split(" ");
// 将c中有的classNames中的项删除
for (var i = 0; i < c.length; i++) {
for (var k = 0; k < classNames.length; k++) {
if (classNames[k] == c[i]) {
break;
}
}
if (k == classNames.length) {
// 表示没有在c中找到classNames中的项,表示需要留下来
cs[cs.length] = c[i];
}
}
this.className = cs.concat.apply([], cs).join(" ");
});
return this;
}
// hasClass
, hasClass: function (value) {
// 只判断一个
return new RegExp(value).test(this[0].className);
}
// bind
, bind: function (event, func) {
// 应该先判断
this.each(function () {
this["on" + event] = func;
});
return this;
}
// click
, click: function (event) {
/*
if( typeof event === "function") {
this.each( function() {
this.onclick = event;
} );
}
*/
this.bind("click", event);
return this;
}
};
jKuery.fn.ini.prototype = jKuery.fn;
// 通过id或标签名获得元素对象
function get(selector, parent) {
var m = /^#(\w+)$/.exec(selector);
if (m) {
this[0] = document.getElementById(m[1]);
this.length = 1;
return this;
} else {
// 如果不是id,当做标签获得元素
// 默认在parent下面获得这个元素,该对象为jk对象
var l, arr = [];
if (parent === "document" || !parent) {
arr = document.getElementsByTagName(selector);
} else {
// 如果是jk对象 这里有个Bug,如果parent中对象有父子关系20131101
if (l = parent.length) {
for (var i = 0; i < l; i++) {
var dom = parent[i]; // 获得dom对象
// 在里面获得子元素
arr[arr.length] = dom.getElementsByTagName(selector);
}
arr = arr.concat.apply([], arr); // 展开数组
}
}
// 将数组加到this中
this.length = this.length || 0;
for (var i = 0; i < arr.length; i++) {
this[this.length++] = arr[i];
}
return this
// 如果也不是jk对象,直接返回this,表示没有得到元素
}
};
jKuery.trim = function (str) {
if (str.trim) {
return str.trim();
} else {
str.replace(/^\s+/, "").replace(/\s+$/, "");
}
};
w.J = w.jKuery = jKuery;
})(window);

评论列表( 0 )

你可以在登录后,发表评论

搜索帮助

12_float_left_people 12_float_left_close