cesium-examples/map/libs/JSLite.js

1137 lines
44 KiB
JavaScript
Raw Normal View History

;(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;
}));