1137 lines
44 KiB
JavaScript
1137 lines
44 KiB
JavaScript
|
;(function(root, factory) {
|
|||
|
if (typeof define === 'function' && define.amd) {
|
|||
|
define(['JSLite'], factory);
|
|||
|
} else if (typeof exports === 'object') {
|
|||
|
module.exports = factory(require('JSLite'));
|
|||
|
} else {
|
|||
|
root.JSLite = factory(root.JSLite);
|
|||
|
}
|
|||
|
}(this, function(JSLite) {
|
|||
|
//修复IE,增加方法getComputedStyle为对象的窗口和getPropertyValue方法的对象,它返回的getComputedStyle
|
|||
|
if (window&&!window.getComputedStyle) {
|
|||
|
window.getComputedStyle = function(el, pseudo) {
|
|||
|
this.el = el;
|
|||
|
this.getPropertyValue = function(prop) {
|
|||
|
if (prop == 'float') prop = 'styleFloat';
|
|||
|
prop = camelCase(prop);
|
|||
|
return el.currentStyle[prop] || null;
|
|||
|
}
|
|||
|
return this;
|
|||
|
}
|
|||
|
}
|
|||
|
//IE浏览器对filter方法的支持
|
|||
|
if (!Array.prototype.filter){
|
|||
|
Array.prototype.filter = function(fun /*, thisArg */){
|
|||
|
"use strict";
|
|||
|
if (this === void 0 || this === null)
|
|||
|
throw new TypeError();
|
|||
|
var t = Object(this);
|
|||
|
var len = t.length >>> 0;
|
|||
|
if (typeof fun !== "function")
|
|||
|
throw new TypeError();
|
|||
|
var res = [];
|
|||
|
var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
|
|||
|
for (var i = 0; i < len; i++){
|
|||
|
if (i in t){
|
|||
|
var val = t[i];
|
|||
|
if (fun.call(thisArg, val, i, t))
|
|||
|
res.push(val);
|
|||
|
}
|
|||
|
}
|
|||
|
return res;
|
|||
|
};
|
|||
|
}
|
|||
|
//IE对indexOf方法的支持
|
|||
|
if(!Array.indexOf){
|
|||
|
Array.prototype.indexOf = function(obj){
|
|||
|
for(var i=0; i<this.length; i++){
|
|||
|
if(this[i]==obj) return i;
|
|||
|
}
|
|||
|
return -1;
|
|||
|
}
|
|||
|
}
|
|||
|
//IE对forEach方法的支持
|
|||
|
if (!Array.prototype.forEach) {
|
|||
|
Array.prototype.forEach = function(fun /*, thisp*/){
|
|||
|
var len = this.length;
|
|||
|
if (typeof fun != "function")
|
|||
|
throw new TypeError();
|
|||
|
var thisp = arguments[1];
|
|||
|
for (var i = 0; i < len; i++){
|
|||
|
if (i in this)
|
|||
|
fun.call(thisp, this[i], i, this);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
//删除数组 元素
|
|||
|
if (!Array.prototype.remove){
|
|||
|
Array.prototype.remove = function(val) {
|
|||
|
var index = this.indexOf(val);
|
|||
|
return index > -1 && this.splice(index, 1), this;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// trim 对于原型没有,进行扩展
|
|||
|
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim
|
|||
|
if (!String.prototype.trim) {
|
|||
|
String.prototype.trim = function () {
|
|||
|
return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
|
|||
|
};
|
|||
|
}
|
|||
|
function likeArray(obj) {
|
|||
|
return obj ? typeof obj.length == 'number' : null;
|
|||
|
}
|
|||
|
function each(elements, callback) {
|
|||
|
var i, key;
|
|||
|
if (likeArray(elements)) {
|
|||
|
for (i = 0; i < elements.length; i++) {
|
|||
|
if (callback.call(elements[i], i, elements[i]) === false) {
|
|||
|
return elements;
|
|||
|
}
|
|||
|
}
|
|||
|
} else {
|
|||
|
for (key in elements) {
|
|||
|
if (callback.call(elements[key], key, elements[key]) === false) {
|
|||
|
return elements;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return elements;
|
|||
|
}
|
|||
|
|
|||
|
var class2type = {}
|
|||
|
each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(i, name) {
|
|||
|
class2type[ "[object " + name + "]" ] = name.toLowerCase();
|
|||
|
});
|
|||
|
|
|||
|
function type(obj) {
|
|||
|
if ( obj == null ) return obj + "";
|
|||
|
return typeof obj === "object" || typeof obj === "function" ?
|
|||
|
class2type[ toString.call(obj) ] || "object" :
|
|||
|
typeof obj;
|
|||
|
}
|
|||
|
|
|||
|
function isFunction(fn) {
|
|||
|
return type(fn) == 'function';
|
|||
|
}
|
|||
|
|
|||
|
function isObject(obj) {
|
|||
|
return type(obj) == 'object';
|
|||
|
}
|
|||
|
|
|||
|
function isArray(arr) {
|
|||
|
return Array.isArray ? Array.isArray(arr) : type(arr) === 'array';
|
|||
|
}
|
|||
|
|
|||
|
function isString(obj) {
|
|||
|
return typeof obj == 'string';
|
|||
|
}
|
|||
|
function isPlainObject(obj) {
|
|||
|
// 判断是否为 `{}` 和 `new Object`
|
|||
|
function hasOwn( class2type ) {
|
|||
|
return class2type.hasOwnProperty;
|
|||
|
}
|
|||
|
// 判断不是简单的对象 非 `DOM 节点`,`window`
|
|||
|
if ( JSLite.type( obj ) !== "object" || obj.nodeType || JSLite.isWindow( obj ) ) return false;
|
|||
|
if ( obj.constructor && !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) return false;
|
|||
|
// 如果是 `{}` 和 `new Object` 返回true
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
function isJson(obj) {
|
|||
|
var isjson = typeof(obj) == "object" &&
|
|||
|
toString.call(obj).toLowerCase() == "[object object]" && !obj.length;
|
|||
|
return isjson;
|
|||
|
}
|
|||
|
|
|||
|
function isWindow(win) {
|
|||
|
return win && win == win.window;
|
|||
|
}
|
|||
|
function isDocument(doc) {
|
|||
|
return doc && doc.nodeType == doc.DOCUMENT_NODE;
|
|||
|
}
|
|||
|
var P = {};
|
|||
|
P = {
|
|||
|
singleTagRE: /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
|
|||
|
fragmentRE: /^\s*<(\w+|!)[^>]*>/,
|
|||
|
tagExpanderRE: /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
|
|||
|
table: document.createElement('table'),
|
|||
|
tableRow: document.createElement('tr'),
|
|||
|
containers: {
|
|||
|
'*': document.createElement('div'),
|
|||
|
'tr': document.createElement('tbody'),
|
|||
|
'tbody': P.table,
|
|||
|
'thead': P.table,
|
|||
|
'tfoot': P.table,
|
|||
|
'td': P.tableRow,
|
|||
|
'th': P.tableRow
|
|||
|
}
|
|||
|
}
|
|||
|
// fragment
|
|||
|
// 需要一个HTML字符串和一个可选的标签名
|
|||
|
// 生成DOM节点从给定的HTML字符串节点。
|
|||
|
// 生成的DOM节点作为一个数组返回。
|
|||
|
function fragment(html, name) {
|
|||
|
var dom, container;
|
|||
|
if (P.singleTagRE.test(html)) dom = JSLite(document.createElement(RegExp.$1));
|
|||
|
if (!dom) {
|
|||
|
if (html.replace) {
|
|||
|
html = html.replace(P.tagExpanderRE, "<$1></$2>");
|
|||
|
}
|
|||
|
if (name === undefined) {
|
|||
|
name = P.fragmentRE.test(html) && RegExp.$1;
|
|||
|
}
|
|||
|
if (!(name in P.containers)) {
|
|||
|
name = '*';
|
|||
|
}
|
|||
|
container = P.containers[name];
|
|||
|
container.innerHTML = '' + html;
|
|||
|
dom = each(slice.call(container.childNodes), function() {
|
|||
|
container.removeChild(this);
|
|||
|
});
|
|||
|
}
|
|||
|
return dom;
|
|||
|
}
|
|||
|
|
|||
|
function funcArg(context, arg, idx, payload) {
|
|||
|
return isFunction(arg) ? arg.call(context, idx, payload) : arg;
|
|||
|
}
|
|||
|
|
|||
|
//将样式属性字符转换成驼峰。
|
|||
|
function camelCase(string){
|
|||
|
// Support: IE9-11+
|
|||
|
return string.replace( /^-ms-/, "ms-" ).replace( /-([a-z])/g, function( all, letter ) {
|
|||
|
return letter.toUpperCase();
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
//将字符串格式化成 如border-width 样式上使用
|
|||
|
function dasherize(str) {
|
|||
|
return str.replace(/::/g, '/')
|
|||
|
.replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
|
|||
|
.replace(/([a-z\d])([A-Z])/g, '$1_$2')
|
|||
|
.replace(/_/g, '-')
|
|||
|
.toLowerCase()
|
|||
|
}
|
|||
|
|
|||
|
// parents、 nextAll等方法调用
|
|||
|
// nodes 节点集合或者单个节点
|
|||
|
// selector 选择器,过滤用
|
|||
|
// dir 获取集合比如`parentNode`
|
|||
|
function dir(nodes,selector,dir){
|
|||
|
var ancestors = []
|
|||
|
while (nodes.length > 0) nodes = $.map(nodes, function(node){
|
|||
|
if ((node = node[dir]) && !isDocument(node) && ancestors.indexOf(node) < 0) {
|
|||
|
ancestors.push(node)
|
|||
|
return node
|
|||
|
}
|
|||
|
})
|
|||
|
return selector&&isString(selector)?$(ancestors).filter(selector):$(ancestors);
|
|||
|
}
|
|||
|
var emptyArray = [],
|
|||
|
slice = emptyArray.slice,
|
|||
|
filter = emptyArray.filter,
|
|||
|
some = emptyArray.some,
|
|||
|
emptyObject = {},
|
|||
|
toString = emptyObject.toString,
|
|||
|
elementTypes = [1, 9, 11],
|
|||
|
propMap = {
|
|||
|
'tabindex': 'tabIndex',
|
|||
|
'readonly': 'readOnly',
|
|||
|
'for': 'htmlFor',
|
|||
|
'class': 'className',
|
|||
|
'maxlength': 'maxLength',
|
|||
|
'cellspacing': 'cellSpacing',
|
|||
|
'cellpadding': 'cellPadding',
|
|||
|
'rowspan': 'rowSpan',
|
|||
|
'colspan': 'colSpan',
|
|||
|
'usemap': 'useMap',
|
|||
|
'frameborder': 'frameBorder',
|
|||
|
'contenteditable': 'contentEditable'
|
|||
|
},
|
|||
|
JSLite;
|
|||
|
|
|||
|
|
|||
|
JSLite = (function(){
|
|||
|
var JSLite = function(selector) {
|
|||
|
return new JSLite.fn.init(selector);
|
|||
|
};
|
|||
|
|
|||
|
JSLite.fn = JSLite.prototype = {
|
|||
|
init: function(selector) {
|
|||
|
var dom ;
|
|||
|
if (!selector) {
|
|||
|
dom = emptyArray,dom.selector = selector || '',dom.__proto__ = JSLite.fn.init.prototype;
|
|||
|
} else if (typeof selector == 'string' && (selector = selector.trim()) && selector[0] == '<' && /^\s*<(\w+|!)[^>]*>/.test(selector)) {
|
|||
|
dom = fragment(selector),selector=null;
|
|||
|
} else if (isFunction(selector)) {
|
|||
|
return JSLite(document).ready(selector);
|
|||
|
} else {
|
|||
|
if (isArray(selector)) {
|
|||
|
dom = selector;
|
|||
|
} else if (isObject(selector)) {
|
|||
|
dom = [selector], selector = null
|
|||
|
} else if (elementTypes.indexOf(selector.nodeType) >= 0 || selector === window) {
|
|||
|
dom = [selector], selector = null;
|
|||
|
} else {
|
|||
|
dom = (function(){
|
|||
|
var found;
|
|||
|
return (document && /^#([\w-]+)$/.test(selector))?
|
|||
|
((found = document.getElementById(RegExp.$1)) ? [found] : [] ):
|
|||
|
slice.call(
|
|||
|
/^\.([\w-]+)$/.test(selector) ? document.getElementsByClassName(RegExp.$1) :
|
|||
|
/^[\w-]+$/.test(selector) ? document.getElementsByTagName(selector) :
|
|||
|
document.querySelectorAll(selector)
|
|||
|
);
|
|||
|
})();
|
|||
|
}
|
|||
|
}
|
|||
|
dom = dom || emptyArray;
|
|||
|
JSLite.extend(dom, JSLite.fn);
|
|||
|
dom.selector = selector || '';
|
|||
|
return dom;
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
JSLite.fn.init.prototype = JSLite.fn;
|
|||
|
|
|||
|
return JSLite;
|
|||
|
})();
|
|||
|
|
|||
|
JSLite.extend = JSLite.fn.extend = function () {
|
|||
|
var options, name, src, copy,
|
|||
|
target = arguments[0],i = 1,
|
|||
|
length = arguments.length,
|
|||
|
deep = false;
|
|||
|
//处理深拷贝的情况
|
|||
|
if (typeof (target) === "boolean")
|
|||
|
deep = target,target = arguments[1] || {},i = 2;
|
|||
|
//处理时,目标是一个字符串或(深拷贝可能的情况下)的东西
|
|||
|
if (typeof (target) !== "object" && !isFunction(target))
|
|||
|
target = {};
|
|||
|
//扩展JSLite的本身,如果只有一个参数传递
|
|||
|
if (length === i) target = this,--i;
|
|||
|
for (; i < length; i++) {
|
|||
|
if ((options = arguments[i]) != null) {
|
|||
|
for (name in options) {
|
|||
|
src = target[name],copy = options[name];
|
|||
|
if (target === copy) continue;
|
|||
|
if (copy !== undefined) target[name] = copy;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return target;
|
|||
|
};
|
|||
|
|
|||
|
JSLite.extend({
|
|||
|
isDocument:isDocument,
|
|||
|
isFunction:isFunction,
|
|||
|
isObject:isObject,
|
|||
|
isArray:isArray,
|
|||
|
isString:isString,
|
|||
|
isWindow:isWindow,
|
|||
|
isPlainObject:isPlainObject,
|
|||
|
isJson:isJson,
|
|||
|
parseJSON:JSON.parse,
|
|||
|
type:type,
|
|||
|
likeArray:likeArray,
|
|||
|
trim:function(str){return str == null ? "" : String.prototype.trim.call(str)},
|
|||
|
intersect:function(a,b){
|
|||
|
var array=[];
|
|||
|
a.forEach(function(item){
|
|||
|
if(b.indexOf(item)>-1) array.push(item);
|
|||
|
})
|
|||
|
return array;
|
|||
|
},
|
|||
|
error:function(msg) {throw msg;},
|
|||
|
getUrlParam: function(name, searchStr) {
|
|||
|
// 兼容 ?id=22&name=%E4%B8%AD%E6%96%87&DEBUG 处理
|
|||
|
var url = searchStr || location.search;
|
|||
|
var params = {};
|
|||
|
|
|||
|
if (url.indexOf('?') != -1) {
|
|||
|
var arr = url.substr(1).split('&');
|
|||
|
for(var i = 0, l = arr.length; i < l; i ++) {
|
|||
|
var kv = arr[i].split('=');
|
|||
|
params[kv[0]] = kv[1] && decodeURIComponent(kv[1]); // 有值解码,无值 undefined
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return name ? params[name] : params;
|
|||
|
},
|
|||
|
each:function(elements, callback){return each.apply(this,arguments);},
|
|||
|
map:function(elements, callback){
|
|||
|
var value, values = [], i, key
|
|||
|
if (likeArray(elements)) for (i = 0; i < elements.length; i++) {
|
|||
|
value = callback(elements[i], i)
|
|||
|
if (value != null) values.push(value)
|
|||
|
}
|
|||
|
else for (key in elements) {
|
|||
|
value = callback(elements[key], key)
|
|||
|
if (value != null) values.push(value)
|
|||
|
}
|
|||
|
return values.length > 0 ? JSLite.fn.concat.apply([], values) : values;
|
|||
|
},
|
|||
|
grep:function(elements, callback){
|
|||
|
return filter.call(elements, callback)
|
|||
|
},
|
|||
|
matches:function(element, selector){
|
|||
|
if (!selector || !element || element.nodeType !== 1) return false;
|
|||
|
var matchesSelector = element.webkitMatchesSelector || element.mozMatchesSelector ||
|
|||
|
element.oMatchesSelector || element.msMatchesSelector || element.matchesSelector;
|
|||
|
if (matchesSelector) return matchesSelector.call(element, selector);
|
|||
|
},
|
|||
|
unique:function(array){return filter.call(array, function(item, idx){ return array.indexOf(item) == idx })},
|
|||
|
inArray:function(elem, array, i){
|
|||
|
return emptyArray.indexOf.call(array, elem, i)
|
|||
|
},
|
|||
|
sibling:function(nodes,ty){
|
|||
|
var ancestors = [];
|
|||
|
if(nodes.length > 0) ancestors = JSLite.map(nodes, function(node){
|
|||
|
if ((node = node[ty]) && !isDocument(node) && ancestors.indexOf(node) < 0)
|
|||
|
ancestors.push(node)
|
|||
|
return node
|
|||
|
});
|
|||
|
return this.unique(ancestors);
|
|||
|
},
|
|||
|
contains:function(parent, node){
|
|||
|
if(parent&&!node) return document.documentElement.contains(parent)
|
|||
|
return parent !== node && parent.contains(node)
|
|||
|
},
|
|||
|
camelCase:camelCase,
|
|||
|
now:Date.now
|
|||
|
});
|
|||
|
|
|||
|
JSLite.fn.extend({
|
|||
|
forEach: emptyArray.forEach,
|
|||
|
concat: emptyArray.concat,
|
|||
|
indexOf: emptyArray.indexOf,
|
|||
|
each: function(callback){
|
|||
|
return JSLite.each(this,callback);
|
|||
|
},
|
|||
|
map: function(fn){
|
|||
|
return JSLite(JSLite.map(this, function(el, i){ return fn.call(el, i, el) }));
|
|||
|
},
|
|||
|
get: function(index){
|
|||
|
return index === undefined ? slice.call(this) : this[index >= 0 ? index : index + this.length];
|
|||
|
},
|
|||
|
index: function(element){
|
|||
|
return element ? (type(element) === 'string'?this.indexOf(this.parent().children(element)[0]):this.indexOf(element))
|
|||
|
: this.parent().children().indexOf(this[0])
|
|||
|
},
|
|||
|
is: function(selector){
|
|||
|
if (this.length > 0 && typeof selector !== 'string') return this.indexOf(selector)>-1?true:false;
|
|||
|
return this.length > 0 && JSLite.matches(this[0], selector);
|
|||
|
},
|
|||
|
add: function(selector){return JSLite(JSLite.unique(this.concat(JSLite(selector))) );},
|
|||
|
eq: function(idx){return idx === -1 ? JSLite(this.slice(idx)) : JSLite(this.slice(idx, + idx + 1))},
|
|||
|
first: function(){
|
|||
|
var el = this[0]
|
|||
|
return el && !isObject(el) ? el : JSLite(el)
|
|||
|
},
|
|||
|
slice:function(argument) { return JSLite(slice.apply(this, arguments));},
|
|||
|
size:function(){return this.length;},
|
|||
|
//遍历查找对象
|
|||
|
filter:function(selector){
|
|||
|
if (isFunction(selector)) return this.not(this.not(selector))
|
|||
|
return JSLite(filter.call(this, function(element){
|
|||
|
return JSLite.matches(element, selector)
|
|||
|
}))
|
|||
|
},
|
|||
|
not:function(selector){
|
|||
|
var nodes = [];
|
|||
|
if (isFunction(selector)&& selector.call !== undefined){
|
|||
|
this.each(function(idx){
|
|||
|
if (!selector.call(this,idx)) nodes.push(this);
|
|||
|
});
|
|||
|
}else {
|
|||
|
var excludes = typeof selector == 'string' ? this.filter(selector):
|
|||
|
(likeArray(selector) && isFunction(selector.item)) ? slice.call(selector) : JSLite(selector)
|
|||
|
this.forEach(function(el){
|
|||
|
if (excludes.indexOf(el) < 0) nodes.push(el)
|
|||
|
})
|
|||
|
}
|
|||
|
return JSLite(nodes)
|
|||
|
},
|
|||
|
children:function(selector){
|
|||
|
var e=[];
|
|||
|
filter.call(this.pluck('children'), function(item, idx){
|
|||
|
JSLite.map(item,function(els){ if (els&&els.nodeType == 1) e.push(els) })
|
|||
|
});
|
|||
|
return JSLite(e).filter(selector || '*');
|
|||
|
},
|
|||
|
contents: function(selector) {
|
|||
|
return this.map(function() {
|
|||
|
return this.contentDocument || $.grep(this.childNodes,function(node){
|
|||
|
return selector? $.matches(node,selector):node
|
|||
|
})
|
|||
|
})
|
|||
|
},
|
|||
|
parent: function(selector){return JSLite(JSLite.unique(this.pluck('parentNode'))).filter(selector||'*')},
|
|||
|
parents: function(selector){return dir(this,selector,'parentNode')},
|
|||
|
closest: function(selector, context){
|
|||
|
var node = this[0], collection = false
|
|||
|
if (typeof selector == 'object') collection = JSLite(selector)
|
|||
|
while (node && !(collection ? collection.indexOf(node) >= 0 : JSLite.matches(node, selector)))
|
|||
|
node = node !== context && !isDocument(node) && node.parentNode
|
|||
|
return JSLite(node)
|
|||
|
},
|
|||
|
prev: function(selector){
|
|||
|
return JSLite(this.pluck('previousElementSibling')).filter(selector || '*')
|
|||
|
},
|
|||
|
next: function(selector){
|
|||
|
return JSLite(this.pluck('nextElementSibling')).filter(selector || '*')
|
|||
|
},
|
|||
|
nextAll: function (selector) { return dir(this,selector,'nextElementSibling')},
|
|||
|
prevAll: function (selector) { return dir(this,selector,'previousElementSibling')},
|
|||
|
siblings: function(selector){
|
|||
|
var n=[];this.map(function(i,el){
|
|||
|
filter.call(el.parentNode.children, function(els, idx){
|
|||
|
if (els&&els.nodeType == 1&&els!=el) n.push(els)
|
|||
|
});
|
|||
|
})
|
|||
|
return JSLite(n).filter(selector || '*');
|
|||
|
},
|
|||
|
find: function(selector){
|
|||
|
var nodes = this.children(),ancestors=[];
|
|||
|
while (nodes.length > 0)
|
|||
|
nodes=JSLite.map(nodes, function(node,inx){
|
|||
|
if (ancestors.indexOf(node)<0) ancestors.push(node);
|
|||
|
if ((nodes = JSLite(node).children())&&nodes.length>0 ) return nodes;
|
|||
|
});
|
|||
|
return JSLite(ancestors).filter(selector || '*');
|
|||
|
},
|
|||
|
//DOM 操作
|
|||
|
replaceWith: function(newContent){
|
|||
|
return this.before(newContent).remove()
|
|||
|
},
|
|||
|
unwrap: function(){
|
|||
|
this.parent().each(function(){
|
|||
|
JSLite(this).replaceWith(JSLite(this).html());
|
|||
|
})
|
|||
|
return this
|
|||
|
},
|
|||
|
remove: function(selector){
|
|||
|
var elm = selector?JSLite(this.find(funcArg(this, selector))):this;
|
|||
|
return elm.each(function(){
|
|||
|
if (this.parentNode != null) this.parentNode.removeChild(this)
|
|||
|
})
|
|||
|
},
|
|||
|
detach: function(){return this.remove();},
|
|||
|
empty: function(){ return this.each(function(){ this.innerHTML = '' }) },
|
|||
|
clone: function(){return this.map(function(){ return this.cloneNode(true)})},
|
|||
|
text: function(text){
|
|||
|
return text === undefined ?
|
|||
|
(this.length > 0 ? this[0].textContent : null) :
|
|||
|
this.each(function(){this.textContent = funcArg(this, text)});
|
|||
|
},
|
|||
|
html:function(html){
|
|||
|
return 0 in arguments ? this.each(function(idx){
|
|||
|
JSLite(this).empty().append(funcArg(this, html))
|
|||
|
}) : (0 in this ? this[0].innerHTML : null)
|
|||
|
},
|
|||
|
//效果
|
|||
|
hide:function(){ return this.css("display", "none")},
|
|||
|
show:function(){
|
|||
|
return this.each(function(){
|
|||
|
this.style.display == "none" && (this.style.display = '');
|
|||
|
var CurrentStyle = function(e){
|
|||
|
return e.currentStyle || document.defaultView.getComputedStyle(e, null);
|
|||
|
}
|
|||
|
function defaultDisplay(nodeName) {
|
|||
|
var elm=document.createElement(nodeName),display
|
|||
|
JSLite('body').append(JSLite(elm));
|
|||
|
display = CurrentStyle(elm)['display'];
|
|||
|
elm.parentNode.removeChild(elm)
|
|||
|
return display
|
|||
|
}
|
|||
|
if (CurrentStyle(this)['display']=='none') {
|
|||
|
this.style.display = defaultDisplay(this.nodeName)
|
|||
|
}
|
|||
|
})
|
|||
|
},
|
|||
|
toggle:function(setting){
|
|||
|
return this.each(function(){
|
|||
|
var el = JSLite(this);(setting === undefined ? el.css("display") == "none" : setting) ? el.show() : el.hide()
|
|||
|
})
|
|||
|
},
|
|||
|
//尺寸规格
|
|||
|
offset:function(){
|
|||
|
if(this.length==0) return null;
|
|||
|
var obj = this[0].getBoundingClientRect();
|
|||
|
return {
|
|||
|
left: obj.left + window.pageXOffset,
|
|||
|
top: obj.top + window.pageYOffset,
|
|||
|
width: obj.width,
|
|||
|
height: obj.height
|
|||
|
};
|
|||
|
},
|
|||
|
//操控CSS
|
|||
|
css:function(property, value){
|
|||
|
var elem = this[0];
|
|||
|
if(arguments.length < 2){
|
|||
|
if (!elem) return [];
|
|||
|
if(!value && typeof property == 'string') return elem.style[property];
|
|||
|
if(isArray(property)){
|
|||
|
var props = {}
|
|||
|
$.each(property, function(_, prop){
|
|||
|
props[prop] = elem.style[camelCase(prop)]
|
|||
|
})
|
|||
|
return props
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
var css={},k;
|
|||
|
if (typeof property == 'string') {
|
|||
|
//当value的值为非零的 空不存在,删掉property样式
|
|||
|
if (!value && value !== 0) this.each(function(){ this.style.removeProperty(dasherize(property)) });
|
|||
|
else css[dasherize(property)] = value
|
|||
|
} else {
|
|||
|
for(k in property){
|
|||
|
if(!property[k] && property[k] !== 0){
|
|||
|
this.each(function(){ this.style.removeProperty(dasherize(k)) });
|
|||
|
}else{
|
|||
|
css[dasherize(k)] = property[k];
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
// 设置样式
|
|||
|
return this.each(function(){ for(var a in css) this.style[a] = css[a];});
|
|||
|
},
|
|||
|
hasClass:function(name){
|
|||
|
if (!name) return false
|
|||
|
return emptyArray.some.call(this, function(el){
|
|||
|
return (' ' + el.className + ' ').indexOf(this) > -1
|
|||
|
}, ' ' + name + ' ');
|
|||
|
},
|
|||
|
addClass:function(name){
|
|||
|
if (!name) return this;
|
|||
|
var classList,cls,newName;
|
|||
|
return this.each(function(idx){
|
|||
|
classList=[],cls = this.className,newName=funcArg(this, name).trim();
|
|||
|
newName.split(/\s+/).forEach(function(k){
|
|||
|
if (!JSLite(this).hasClass(k)) classList.push(k);
|
|||
|
},this);
|
|||
|
if (!newName) return this;
|
|||
|
classList.length ? this.className = cls + (cls ? " " : "") + classList.join(" "):null;
|
|||
|
})
|
|||
|
},
|
|||
|
removeClass:function(name){
|
|||
|
var cls;
|
|||
|
if (name === undefined) return this.removeAttr('class');
|
|||
|
return this.each(function(idx){
|
|||
|
cls = this.className;
|
|||
|
funcArg(this, name, idx, cls).split(/\s+/).forEach(function(k){
|
|||
|
cls=cls.replace(new RegExp('(^|\\s)'+k+'(\\s|$)')," ").trim();
|
|||
|
},this);
|
|||
|
cls?this.className = cls:this.className = "";
|
|||
|
})
|
|||
|
},
|
|||
|
toggleClass:function(name){
|
|||
|
if(!name) return this;
|
|||
|
return this.each(function(idx){
|
|||
|
var w=JSLite(this),names=funcArg(this, name);
|
|||
|
names.split(/\s+/g).forEach(function(cls){
|
|||
|
w.hasClass(cls)?w.removeClass(cls):w.addClass(cls);
|
|||
|
})
|
|||
|
})
|
|||
|
},
|
|||
|
//属性
|
|||
|
pluck: function(property){ return JSLite.map(this, function(el){ return el[property] })},
|
|||
|
prop: function(name, value){
|
|||
|
name = propMap[name] || name
|
|||
|
return (1 in arguments) ? this.each(function(idx){
|
|||
|
this[name] = funcArg(this, value, idx, this[name])
|
|||
|
}) :(this[0] && this[0][name])
|
|||
|
},
|
|||
|
removeProp: function(name) {
|
|||
|
name = propMap[name] || name;
|
|||
|
return this.each(function() {
|
|||
|
// 在IE中处理window属性可能报错
|
|||
|
try {
|
|||
|
this[name] = undefined;
|
|||
|
delete this[name];
|
|||
|
} catch(e) {}
|
|||
|
});
|
|||
|
},
|
|||
|
attr: function(name,value){
|
|||
|
var result,k;
|
|||
|
return (typeof name == 'string' && !(1 in arguments)) ?
|
|||
|
(!this.length || this[0].nodeType !== 1 ? undefined :
|
|||
|
(!(result = this[0].getAttribute(name)) && name in this[0]) ? this[0][name] : result
|
|||
|
) : this.each(function(n){
|
|||
|
if (isObject(name)) for(k in name) this.setAttribute(k, name[k]);
|
|||
|
else this.setAttribute(name,funcArg(this, value));
|
|||
|
});
|
|||
|
},
|
|||
|
removeAttr:function(name){
|
|||
|
return this.each(function(){ this.nodeType === 1 && this.removeAttribute(name)});
|
|||
|
},
|
|||
|
val:function(value){
|
|||
|
return 0 in arguments ?
|
|||
|
this.each(function(idx){this.value = funcArg(this, value, idx, this.value)}) :
|
|||
|
(this[0] && (this[0].multiple ?
|
|||
|
JSLite(this[0]).find('option').filter(function(){ return this.selected }).pluck('value') :
|
|||
|
this[0].value))
|
|||
|
},
|
|||
|
data: function(name, value){
|
|||
|
var attrName = 'data-' + name,data,a
|
|||
|
if(!name) return this[0].dataset;
|
|||
|
if(name&&isJson(name)){
|
|||
|
for(a in name) this.attr('data-' + a, name[a])
|
|||
|
return this
|
|||
|
}
|
|||
|
if(value&&(isArray(value) || isJson(value))) value = JSON.stringify(value);
|
|||
|
|
|||
|
data = (1 in arguments) ? this.attr(attrName, value) : this.attr(attrName);
|
|||
|
try{data = JSON.parse(data);}catch(e){}
|
|||
|
return data;
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
// 创建 scrollLeft 和 scrollTop 方法
|
|||
|
JSLite.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
|
|||
|
var top = "pageYOffset" === prop;
|
|||
|
JSLite.fn[ method ] = function( value ) {
|
|||
|
var win = isWindow( this[0] );
|
|||
|
if ( value === undefined ) return win ? window[ prop ] : this[0][ method ];
|
|||
|
if ( win ) {
|
|||
|
window.scrollTo(
|
|||
|
!top ? value : window.pageXOffset,
|
|||
|
top ? value : window.pageYOffset
|
|||
|
);
|
|||
|
return this[0];
|
|||
|
} else return this.each(function(){
|
|||
|
this[ method ] = value;
|
|||
|
})
|
|||
|
};
|
|||
|
});
|
|||
|
|
|||
|
;['after','prepend','before','append'].forEach(function(operator, operatorIndex) {
|
|||
|
var inside = operatorIndex % 2;
|
|||
|
JSLite.fn[operator] = function(){
|
|||
|
var argType, nodes = JSLite.map(arguments, function(arg) {
|
|||
|
argType = type(arg)
|
|||
|
if(argType=="function") arg = funcArg(this, arg)
|
|||
|
return argType == "object" || argType == "array" || arg == null ? arg : fragment(arg)
|
|||
|
}),parent,script,copyByClone = this.length > 1
|
|||
|
if (nodes.length < 1) return this
|
|||
|
return this.each(function(_, target){
|
|||
|
parent = inside ? target : target.parentNode
|
|||
|
target = operatorIndex == 0 ? target.nextSibling :
|
|||
|
operatorIndex == 1 ? target.firstChild :
|
|||
|
operatorIndex == 2 ? target :
|
|||
|
null;
|
|||
|
|
|||
|
var parentInDocument = JSLite.contains(document.documentElement, parent)
|
|||
|
|
|||
|
nodes.forEach(function(node){
|
|||
|
var txt
|
|||
|
if (copyByClone) node = node.cloneNode(true)
|
|||
|
parent.insertBefore(node, target);
|
|||
|
if(parentInDocument && node.nodeName != null && node.nodeName.toUpperCase() === 'SCRIPT' &&
|
|||
|
(!node.type || node.type === 'text/javascript') && !node.src) txt=node.innerHTML;
|
|||
|
else if(parentInDocument &&node.children && node.children.length>0&&JSLite(node)&&(script=JSLite(node).find("script")))
|
|||
|
if(script.length>0) script.each(function(_,item){
|
|||
|
txt=item.innerHTML
|
|||
|
});
|
|||
|
txt?window['eval'].call(window, txt):undefined;
|
|||
|
});
|
|||
|
})
|
|||
|
}
|
|||
|
JSLite.fn[inside ? operator+'To' : 'insert'+(operatorIndex ? 'Before' : 'After')] = function(html){
|
|||
|
JSLite(html)[operator](this)
|
|||
|
return this
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
|
|||
|
;['width', 'height'].forEach(function(dimension){
|
|||
|
var dimensionProperty = dimension.replace(/./,dimension[0].toUpperCase())
|
|||
|
JSLite.fn[dimension]=function(value){
|
|||
|
var offset, el = this[0]
|
|||
|
if (value === undefined) return isWindow(el) ? el['inner' + dimensionProperty] :
|
|||
|
isDocument(el) ? el.documentElement['scroll' + dimensionProperty] :
|
|||
|
(offset = this.offset()) && offset[dimension]
|
|||
|
else return this.each(function(idx){
|
|||
|
el = $(this)
|
|||
|
el.css(dimension, funcArg(this, value, idx, el[dimension]()))
|
|||
|
})
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
var _JSLite = window.JSLite,
|
|||
|
_$ = window.$;
|
|||
|
|
|||
|
JSLite.noConflict = function( deep ) {
|
|||
|
if ( window.$ === JSLite ) {
|
|||
|
window.$ = _$;
|
|||
|
}
|
|||
|
|
|||
|
if ( deep && window.JSLite === JSLite ) {
|
|||
|
window.JSLite = _JSLite;
|
|||
|
}
|
|||
|
|
|||
|
return JSLite;
|
|||
|
};
|
|||
|
|
|||
|
window.JSLite = window.$ = JSLite;
|
|||
|
;(function($){
|
|||
|
$.fn.extend({
|
|||
|
serializeArray:function(){
|
|||
|
var result = [], el,type,elm=this.get(0);
|
|||
|
if(!elm || ! elm.elements) return result
|
|||
|
$([].slice.call(this.get(0).elements)).each(function(){
|
|||
|
el = $(this),type = el.attr('type')
|
|||
|
if (this.nodeName.toLowerCase() != 'fieldset' && !this.disabled && type != 'submit' && type != 'reset' && type != 'button' && ((type != 'radio' && type != 'checkbox') || this.checked)) {
|
|||
|
result.push({name: el.attr('name'), value: el.val() })
|
|||
|
}
|
|||
|
});
|
|||
|
return result
|
|||
|
},
|
|||
|
serialize:function(result){
|
|||
|
result = [],this.serializeArray().forEach(function(elm){
|
|||
|
result.push(encodeURIComponent(elm.name) + '=' + encodeURIComponent(elm.value))
|
|||
|
})
|
|||
|
return result.join('&')
|
|||
|
}
|
|||
|
});
|
|||
|
})(JSLite);
|
|||
|
;(function($){
|
|||
|
var handlers = {},_jid = 1
|
|||
|
/* 绑定事件 start */
|
|||
|
$.fn.extend({
|
|||
|
ready: function(callback){
|
|||
|
if (/complete|loaded|interactive/.test(document.readyState) && document.body) callback(JSLite)
|
|||
|
else document.addEventListener('DOMContentLoaded', function(){callback(JSLite) }, false)
|
|||
|
return this
|
|||
|
},
|
|||
|
bind: function(event, func) {return this.each(function(){add(this, event, func)})},
|
|||
|
unbind:function(event, func) {return this.each(function(){remove(this, event, func)})},
|
|||
|
on:function(event, selector, data, callback){
|
|||
|
var self = this
|
|||
|
if (event && !$.isString(event)) {
|
|||
|
$.each(event, function(type, fn){
|
|||
|
self.on(type, selector, data, fn)
|
|||
|
})
|
|||
|
return self
|
|||
|
}
|
|||
|
if (!$.isString(selector) && !$.isFunction(callback) && callback !== false)
|
|||
|
callback = data, data = selector, selector = undefined
|
|||
|
if ($.isFunction(data) || data === false)
|
|||
|
callback = data, data = undefined
|
|||
|
if (callback === false) callback = function(){return false;}
|
|||
|
return this.each(function(){
|
|||
|
add(this, event, callback, data, selector)
|
|||
|
})
|
|||
|
},
|
|||
|
off:function(event, selector, callback){
|
|||
|
var self = this
|
|||
|
if (event && !$.isString(event)) {
|
|||
|
$.each(event, function(type, fn){
|
|||
|
self.off(type, selector, fn)
|
|||
|
})
|
|||
|
return self
|
|||
|
}
|
|||
|
if (!$.isString(selector) && !$.isFunction(callback) && callback !== false)
|
|||
|
callback = selector, selector = undefined
|
|||
|
if (callback === false) callback = function(){return false;}
|
|||
|
return self.each(function(){
|
|||
|
remove(this, event, callback, selector)
|
|||
|
})
|
|||
|
},
|
|||
|
delegate: function(selector, event, callback){
|
|||
|
return this.on(event, selector, callback)
|
|||
|
},
|
|||
|
trigger:function(event, data){
|
|||
|
var type = event,specialEvents={}
|
|||
|
specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = 'MouseEvents';
|
|||
|
if (typeof type == 'string') {
|
|||
|
event = document.createEvent(specialEvents[type] || 'Events');
|
|||
|
event.initEvent(type,true, true);
|
|||
|
}else return;
|
|||
|
event._data = data;
|
|||
|
return this.each(function(){
|
|||
|
if('dispatchEvent' in this) this.dispatchEvent(event);
|
|||
|
});
|
|||
|
}
|
|||
|
});
|
|||
|
$.event={add:add,remove:remove};
|
|||
|
function add(element, events, func, data, selector){
|
|||
|
var self=this,id=jid(element),set=(handlers[id] || (handlers[id] = []));
|
|||
|
events.split(/\s/).forEach(function(event){
|
|||
|
var handler = $.extend(parse(event), {fn: func,sel: selector, i: set.length});
|
|||
|
var proxyfn = handler.proxy = function (e) {
|
|||
|
//处理事件代理
|
|||
|
if (selector) {
|
|||
|
var $temp = $(element).find(selector);
|
|||
|
var res = [].some.call($temp, function(val) {
|
|||
|
return val === e.target || $.contains(val, e.target);
|
|||
|
});
|
|||
|
//不包含
|
|||
|
if (!res) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
e.data = data;
|
|||
|
var result = func.apply(element,e._data == undefined ? [e] : [e].concat(e._data));
|
|||
|
if (result === false) e.preventDefault(), e.stopPropagation();
|
|||
|
return result;
|
|||
|
};
|
|||
|
set.push(handler)
|
|||
|
if (element.addEventListener) element.addEventListener(handler.e,proxyfn, false);
|
|||
|
})
|
|||
|
}
|
|||
|
function remove(element, events, func, selector){
|
|||
|
;(events || '').split(/\s/).forEach(function(event){
|
|||
|
$.event = parse(event)
|
|||
|
findHandlers(element, event, func, selector).forEach(function(handler){
|
|||
|
delete handlers[jid(element)][handler.i]
|
|||
|
if (element.removeEventListener) element.removeEventListener(handler.e, handler.proxy, false);
|
|||
|
})
|
|||
|
})
|
|||
|
}
|
|||
|
function jid(element) {return element._jid || (element._jid = _jid++)}
|
|||
|
function parse(event) {
|
|||
|
var parts = ('' + event).split('.');
|
|||
|
return {e: parts[0], ns: parts.slice(1).sort().join(' ')};
|
|||
|
}
|
|||
|
function findHandlers(element, event, func, selector){
|
|||
|
var self=this,id = jid(element);event = parse(event)
|
|||
|
return (handlers[jid(element)] || []).filter(function(handler) {
|
|||
|
return handler
|
|||
|
&& (!event.e || handler.e == event.e)
|
|||
|
&& (!func || handler.fn.toString()===func.toString())
|
|||
|
&& (!selector || handler.sel == selector);
|
|||
|
})
|
|||
|
}
|
|||
|
;("blur focus focusin focusout load resize scroll unload click dblclick " +
|
|||
|
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
|
|||
|
"change select submit keydown keypress keyup error paste drop dragstart dragover " +
|
|||
|
"beforeunload").split(' ').forEach(function(event) {
|
|||
|
$.fn[event] = function(callback) {
|
|||
|
return callback ? this.bind(event, callback) : this.trigger(event);
|
|||
|
}
|
|||
|
});
|
|||
|
/* 绑定事件 end */
|
|||
|
})(JSLite);
|
|||
|
;(function($){
|
|||
|
var jsonpID = 0
|
|||
|
function parseArguments(url, data, success, dataType){
|
|||
|
$.isFunction(data) && (dataType = success, success = data, data = undefined),
|
|||
|
$.isFunction(success) || (dataType = success, success = undefined)
|
|||
|
return {
|
|||
|
url: url,
|
|||
|
data: data,
|
|||
|
success: success,
|
|||
|
dataType: dataType
|
|||
|
}
|
|||
|
}
|
|||
|
$.extend({
|
|||
|
ajaxSettings:{
|
|||
|
// 默认请求类型
|
|||
|
type:'GET',
|
|||
|
// 如果请求成功时执行回调
|
|||
|
success:function(){},
|
|||
|
// 如果请求失败时执行回调
|
|||
|
error:function(){},
|
|||
|
xhr:function () {
|
|||
|
return new window.XMLHttpRequest();
|
|||
|
},
|
|||
|
processData:true,
|
|||
|
complete:function(){},//要求执行回调完整(包括:错误和成功)
|
|||
|
// MIME类型的映射
|
|||
|
accepts:{
|
|||
|
script:'text/javascript, application/javascript',
|
|||
|
json: 'application/json',
|
|||
|
xml: 'application/xml, text/xml',
|
|||
|
html: 'text/html',
|
|||
|
text: 'text/plain'
|
|||
|
},
|
|||
|
// 应该被允许缓存GET响应
|
|||
|
cache: true
|
|||
|
},
|
|||
|
param:function(obj,traditional,scope){
|
|||
|
if($.type(obj) == "string") return obj;
|
|||
|
var params = [],str='';
|
|||
|
params.add=function(key, value){
|
|||
|
this.push(encodeURIComponent(key) + '=' + encodeURIComponent(value== null?"":value))
|
|||
|
};
|
|||
|
if(scope==true&&type(obj)=='object') params.add(traditional,obj)
|
|||
|
else {
|
|||
|
for(var p in obj) {
|
|||
|
var v = obj[p],str='',
|
|||
|
k = (function(){
|
|||
|
if (traditional) {
|
|||
|
if (traditional==true) return p;
|
|||
|
else{
|
|||
|
if(scope&&type(obj)=='array') return traditional
|
|||
|
return traditional + "[" + ($.type(obj)=='array'?"":p) + "]";
|
|||
|
};
|
|||
|
};
|
|||
|
return p
|
|||
|
})();
|
|||
|
if (typeof v=="object") {
|
|||
|
str=this.param(v, k ,traditional);
|
|||
|
}else if(!isFunction(v)){
|
|||
|
str=params.add(k, v);
|
|||
|
}
|
|||
|
|
|||
|
if (str) params.push(str);
|
|||
|
};
|
|||
|
}
|
|||
|
return params.join('&');
|
|||
|
},
|
|||
|
get:function(url, success){return $.ajax(parseArguments.apply(null, arguments))},
|
|||
|
post:function(url, data, success, dataType){
|
|||
|
var options = parseArguments.apply(null, arguments);
|
|||
|
return options.type = "POST", $.ajax(options);
|
|||
|
},
|
|||
|
getJSON:function(/* url, data, success */){
|
|||
|
var options = parseArguments.apply(null, arguments),
|
|||
|
url = arguments[0];
|
|||
|
if(url&&url == document.location.host) options.dataType = 'json';
|
|||
|
else options.dataType = 'jsonp';
|
|||
|
return this.ajax(options);
|
|||
|
},
|
|||
|
ajaxJSONP:function (options) {
|
|||
|
var _callbackName = options.jsonpCallback,
|
|||
|
callbackName = ($.isFunction(_callbackName) ? _callbackName() : _callbackName) || ('jsonp' + (++jsonpID)),
|
|||
|
script = document.createElement('script'),
|
|||
|
originalCallback = window[callbackName],
|
|||
|
responseData,xhr={};
|
|||
|
|
|||
|
$(script).on('load error', function(e, errorType){
|
|||
|
$(script).off().remove()
|
|||
|
if (e.type == 'error' || !responseData) {
|
|||
|
options.error(e, errorType || 'error',options)
|
|||
|
} else {
|
|||
|
options.success(responseData[0], xhr, options)
|
|||
|
}
|
|||
|
window[callbackName] = originalCallback
|
|||
|
if (responseData && $.isFunction(originalCallback))
|
|||
|
originalCallback(responseData[0])
|
|||
|
originalCallback = responseData = undefined
|
|||
|
})
|
|||
|
|
|||
|
//插入script 获取返回的数据
|
|||
|
window[callbackName] = function(){responseData = arguments}
|
|||
|
script.src = options.url.replace(/\?(.+)=\?/, '?$1=' + callbackName)
|
|||
|
document.head.appendChild(script)
|
|||
|
return options.xhr()
|
|||
|
},
|
|||
|
ajax:function(options){
|
|||
|
var key,settings,name,
|
|||
|
setHeader = function(name, value) { headers[name.toLowerCase()] = [name, value] },
|
|||
|
appendQuery = function(url, query) {
|
|||
|
if (query == '') return url
|
|||
|
return (url + '&' + query).replace(/[&?]{1,2}/, '?')
|
|||
|
},
|
|||
|
serializeData = function(options){
|
|||
|
if (options.processData && options.data && $.type(options.data) != "string")
|
|||
|
options.data = $.param(options.data, options.traditional)
|
|||
|
if (options.data && (!options.type || options.type.toUpperCase() == 'GET'))
|
|||
|
options.url = appendQuery(options.url, options.data), options.data = undefined
|
|||
|
};
|
|||
|
options = options || {};
|
|||
|
if ($.isString(options)) {
|
|||
|
if (arguments[0]=="GET") {
|
|||
|
var urls=arguments[1];
|
|||
|
if (arguments[2]&&$.isFunction(arguments[2])) {
|
|||
|
$.get(urls,arguments[2])
|
|||
|
}else if(arguments[2]&&$.isJson(arguments[2])){
|
|||
|
$.get(urls.indexOf('?')>-1?urls+'&'+this.param(arguments[2]):urls+'?'+this.param(arguments[2]),arguments[3])
|
|||
|
};
|
|||
|
}else if(arguments[0]=="POST"){
|
|||
|
$.post(arguments[1],arguments[2],arguments[3],arguments[4])
|
|||
|
};
|
|||
|
return;
|
|||
|
};
|
|||
|
settings=$.extend({}, options || {});
|
|||
|
for (key in $.ajaxSettings) if (settings[key] === undefined) settings[key] = $.ajaxSettings[key];
|
|||
|
//{ type, url, data, success, dataType, contentType }
|
|||
|
serializeData(settings)
|
|||
|
|
|||
|
//jsonp
|
|||
|
var dataType = settings.dataType, hasPlaceholder = /\?.+=\?/.test(settings.url)
|
|||
|
if (hasPlaceholder) dataType = 'jsonp';
|
|||
|
//给URL后面加上时间戳
|
|||
|
if (settings.cache === false || (
|
|||
|
(!options || options.cache !== true) &&
|
|||
|
('script' == dataType || 'jsonp' == dataType)
|
|||
|
)) {
|
|||
|
settings.url = appendQuery(settings.url, '_=' + Date.now())
|
|||
|
}
|
|||
|
//判断是否为jsonp
|
|||
|
if ('jsonp' == dataType) {
|
|||
|
if (!hasPlaceholder) settings.url = appendQuery(settings.url,settings.jsonp ? (settings.jsonp + '=?') : settings.jsonp === false ? '' : 'callback=?')
|
|||
|
return $.ajaxJSONP(settings)
|
|||
|
}
|
|||
|
|
|||
|
var data = settings.data,
|
|||
|
callback = settings.success || function(){},
|
|||
|
errback = settings.error || function(){},
|
|||
|
mime = $.ajaxSettings.accepts[settings.dataType],
|
|||
|
content = settings.contentType,
|
|||
|
xhr = new XMLHttpRequest(),
|
|||
|
nativeSetHeader = xhr.setRequestHeader,
|
|||
|
headers={};
|
|||
|
if (!settings.crossDomain) setHeader('X-Requested-With', 'XMLHttpRequest'),setHeader('Accept', mime || '*/*');
|
|||
|
if (settings.headers) for (name in settings.headers) setHeader(name, settings.headers[name]);
|
|||
|
if (settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() != 'GET'))
|
|||
|
setHeader('Content-Type', settings.contentType || 'application/x-www-form-urlencoded');
|
|||
|
xhr.onreadystatechange = function(){
|
|||
|
if (xhr.readyState == 4) {
|
|||
|
if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 0) {
|
|||
|
var result, error = false;
|
|||
|
result = xhr.responseText
|
|||
|
try {
|
|||
|
if (settings.dataType == 'script') (1,eval)(result)
|
|||
|
else if (settings.dataType == 'xml') result = xhr.responseXML
|
|||
|
else if (settings.dataType == 'json') result = /^\s*$/.test(result) ? null : JSON.parse(result)
|
|||
|
} catch (e) { error = e }
|
|||
|
|
|||
|
if (error) errback(error, 'parsererror', xhr, settings);
|
|||
|
else callback(result, 'success', xhr);
|
|||
|
} else {
|
|||
|
settings.complete(xhr, error ? 'error' : 'success')
|
|||
|
}
|
|||
|
}
|
|||
|
};
|
|||
|
if (data&&data instanceof Object&&settings.type=='GET'){
|
|||
|
data?settings.url =(settings.url.indexOf('?')>-1?settings.url +'&'+ data:settings.url +'?'+ data) :null;
|
|||
|
}
|
|||
|
var async = 'async' in settings ? settings.async : true
|
|||
|
xhr.open(settings.type, settings.url, async);
|
|||
|
if (mime) xhr.setRequestHeader('Accept', mime);
|
|||
|
if (data instanceof Object && mime == 'application/json' ) data = JSON.stringify(data), content = content || 'application/json';
|
|||
|
for (name in headers) nativeSetHeader.apply(xhr, headers[name]);
|
|||
|
|
|||
|
xhr.send(data?data:null);
|
|||
|
}
|
|||
|
});
|
|||
|
var _load = $.fn.load;
|
|||
|
$.fn.extend({
|
|||
|
load:function (url, data, success) {
|
|||
|
//兼容 onload 事件
|
|||
|
if (arguments[0] && typeof arguments[0] !== 'string' && _load ) return _load.apply( this, arguments );
|
|||
|
if (!this.length || arguments.length === 0) return this
|
|||
|
var self = this, parts = arguments[0].split(/\s/), selector,
|
|||
|
options = parseArguments(url, data, success),
|
|||
|
callback = options.success;
|
|||
|
if (parts.length > 1){
|
|||
|
options.url = parts[0], selector = parts[1]
|
|||
|
}
|
|||
|
options.success = function(response){
|
|||
|
response = response.replace(/<(script)[^>]*>(|[\s\S]+?)<\/\1>/gi,'')
|
|||
|
self.html(selector ? $('<div>').html(response).find(selector) : response)
|
|||
|
callback && callback.apply(self, arguments)
|
|||
|
}
|
|||
|
$.ajax(options)
|
|||
|
return this
|
|||
|
}
|
|||
|
});
|
|||
|
})(JSLite);
|
|||
|
return JSLite;
|
|||
|
}));
|