/* * APICloud JavaScript Library * Copyright (c) 2014 apicloud.com */ (function(window){ var u = {}; var isAndroid = (/android/gi).test(navigator.appVersion); var uzStorage = function(){ var ls = window.localStorage; if(isAndroid){ ls = os.localStorage(); } return ls; }; function parseArguments(url, data, fnSuc, dataType) { if (typeof(data) == 'function') { dataType = fnSuc; fnSuc = data; data = undefined; } if (typeof(fnSuc) != 'function') { dataType = fnSuc; fnSuc = undefined; }; return { url: url, data: data, fnSuc: fnSuc, dataType: dataType } }; u.trim = function(str){ if(String.prototype.trim){ return str == null ? "" : String.prototype.trim.call(str); }else{ return str.replace(/(^\s*)|(\s*$)/g, ""); } }; u.trimAll = function(str){ return str.replace(/\s*/g,''); }; u.isArray = function(obj){ if(Array.isArray){ return Array.isArray(obj); }else{ return obj instanceof Array; } }; u.addEvt = function(el, name, fn, useCapture){ var useCapture = useCapture || false; if(el.addEventListener) { el.addEventListener(name, fn, useCapture); } }; u.rmEvt = function(el, name, fn, useCapture){ var useCapture = useCapture || false; if (el.removeEventListener) { el.removeEventListener(name, fn, useCapture); } }; u.one = function(el, name, fn, useCapture){ var useCapture = useCapture || false; var that = this; var cb = function(){ fn && fn(); that.rmEvt(el, name, cb, useCapture); }; that.addEvt(el, name, cb, useCapture); }; u.dom = function(el, selector){ if(arguments.length === 1 && typeof arguments[0] == 'string'){ if(document.querySelector){ return document.querySelector(arguments[0]); } }else if(arguments.length === 2){ if(el.querySelector){ return el.querySelector(selector); } } }; u.domAll = function(el, selector){ if(arguments.length === 1 && typeof arguments[0] == 'string'){ if(document.querySelectorAll){ return document.querySelectorAll(arguments[0]); } }else if(arguments.length === 2){ if(el.querySelectorAll){ return el.querySelectorAll(selector); } } }; u.byId = function(id){ return document.getElementById(id); }; u.first = function(el, selector){ if(arguments.length === 1){ return el.children[0]; } if(arguments.length === 2){ return this.dom(el, selector+':first-child'); } }; u.last = function(el, selector){ if(arguments.length === 1){ var children = el.children; return children[children.length - 1]; } if(arguments.length === 2){ return this.dom(el, selector+':last-child'); } }; u.eq = function(el, index){ return this.dom(el, ':nth-child('+ index +')'); }; u.not = function(el, selector){ return this.domAll(el, ':not('+ selector +')'); }; u.prev = function(el){ var node = el.previousSibling; if(node.nodeType && node.nodeType === 3){ node = node.previousSibling; return node; } }; u.next = function(el){ var node = el.nextSibling; if(node.nodeType && node.nodeType === 3){ node = node.nextSibling; return node; } }; u.closest = function(el, selector){ var doms, targetDom; var isSame = function(doms, el){ var i = 0, len = doms.length; for(i; i<len; i++){ if(doms[i].isEqualNode(el)){ return doms[i]; } } return false; }; var traversal = function(el, selector){ doms = u.domAll(el.parentNode, selector); targetDom = isSame(doms, el); while(!targetDom){ el = el.parentNode; if(el != null && el.nodeType == el.DOCUMENT_NODE){ return false; } traversal(el, selector); } return targetDom; }; return traversal(el, selector); }; u.remove = function(el){ if(el && el.parentNode){ el.parentNode.removeChild(el); } }; u.attr = function(el, name, value){ if(arguments.length == 2){ return el.getAttribute(name); }else if(arguments.length == 3){ el.setAttribute(name, value); return el; } }; u.removeAttr = function(el, name){ if(arguments.length === 2){ el.removeAttribute(name); } }; u.hasCls = function(el, cls){ if(el.className.indexOf(cls) > -1){ return true; }else{ return false; } }; u.addCls = function(el, cls){ if('classList' in el){ el.classList.add(cls); }else{ var preCls = el.className; var newCls = preCls +' '+ cls; el.className = newCls; } return el; }; u.removeCls = function(el, cls){ if('classList' in el){ el.classList.remove(cls); }else{ var preCls = el.className; var newCls = preCls.replace(cls, ''); el.className = newCls; } return el; }; u.toggleCls = function(el, cls){ if('classList' in el){ el.classList.toggle(cls); }else{ if(u.hasCls(el, cls)){ u.addCls(el, cls); }else{ u.removeCls(el, cls); } } return el; }; u.val = function(el, val){ if(arguments.length === 1){ switch(el.tagName){ case 'SELECT': var value = el.options[el.selectedIndex].value; return value; break; case 'INPUT': return el.value; break; case 'TEXTAREA': return el.value; break; } } if(arguments.length === 2){ switch(el.tagName){ case 'SELECT': el.options[el.selectedIndex].value = val; return el; break; case 'INPUT': el.value = val; return el; break; case 'TEXTAREA': el.value = val; return el; break; } } }; u.prepend = function(el, html){ el.insertAdjacentHTML('afterbegin', html); return el; }; u.append = function(el, html){ el.insertAdjacentHTML('beforeend', html); return el; }; u.before = function(el, html){ el.insertAdjacentHTML('beforebegin', html); return el; }; u.after = function(el, html){ el.insertAdjacentHTML('afterend', html); return el; }; u.html = function(el, html){ if(arguments.length === 1){ return el.innerHTML; }else if(arguments.length === 2){ el.innerHTML = html; return el; } }; u.text = function(el, txt){ if(arguments.length === 1){ return el.textContent; }else if(arguments.length === 2){ el.textContent = txt; return el; } }; u.offset = function(el){ var sl, st; if(document.documentElement){ sl = document.documentElement.scrollLeft; st = document.documentElement.scrollTop; }else{ sl = document.body.scrollLeft; st = document.body.scrollTop; } var rect = el.getBoundingClientRect(); return { l: rect.left + sl, t: rect.top + st, w: el.offsetWidth, h: el.offsetHeight }; }; u.css = function(el, css){ if(typeof css == 'string' && css.indexOf(':') > 0){ el.style && (el.style.cssText += ';' + css); } }; u.cssVal = function(el, prop){ if(arguments.length === 2){ var computedStyle = window.getComputedStyle(el, null); return computedStyle.getPropertyValue(prop); } }; u.jsonToStr = function(json){ if(typeof json === 'object'){ return JSON && JSON.stringify(json); } }; u.strToJson = function(str){ if(typeof str === 'string'){ return JSON && JSON.parse(str); } }; u.setStorage = function(key, value){ if(arguments.length === 2){ var v = value; if(typeof v == 'object'){ v = JSON.stringify(v); v = 'obj-'+ v; }else{ v = 'str-'+ v; } var ls = uzStorage(); if(ls){ ls.setItem(key, v); } } }; u.getStorage = function(key){ var ls = uzStorage(); if(ls){ var v = ls.getItem(key); if(!v){return;} if(v.indexOf('obj-') === 0){ v = v.slice(4); return JSON.parse(v); }else if(v.indexOf('str-') === 0){ return v.slice(4); } } }; u.rmStorage = function(key){ var ls = uzStorage(); if(ls && key){ ls.removeItem(key); } }; u.clearStorage = function(){ var ls = uzStorage(); if(ls){ ls.clear(); } }; /*by king*/ u.fixIos7Bar = function(el){ var strDM = api.systemType; if (strDM == 'ios') { var strSV = api.systemVersion; var numSV = parseInt(strSV,10); var fullScreen = api.fullScreen; var iOS7StatusBarAppearance = api.iOS7StatusBarAppearance; if (numSV >= 7 && !fullScreen && iOS7StatusBarAppearance) { el.style.paddingTop = '20px'; } } }; u.toast = function(title, text, time){ var opts = {}; var show = function(opts, time){ api.showProgress(opts); setTimeout(function(){ api.hideProgress(); },time); }; if(arguments.length === 1){ var time = time || 500; if(typeof title === 'number'){ time = title; }else{ opts.title = title+''; } show(opts, time); }else if(arguments.length === 2){ var time = time || 500; var text = text; if(typeof text === "number"){ var tmp = text; time = tmp; text = null; } if(title){ opts.title = title; }; if(text){ opts.text = text; }; show(opts, time); } if(title){ opts.title = title; }; if(text){ opts.text = text; }; time = time || 500; show(opts, time); }; u.post = function(/*url,data,fnSuc,dataType*/){ var argsToJson = parseArguments.apply(null, arguments); var json = {}; var fnSuc = argsToJson.fnSuc; argsToJson.url && (json.url = argsToJson.url); argsToJson.data && (json.data = argsToJson.data); if(argsToJson.dataType){ var type = toLowerCase(argsToJson.dataType); if (type == 'text'||type == 'json') { json.dataType = type; } }else{ json.dataType = 'json'; }; json.method = 'post'; api.ajax(json, function(ret,err){ if (ret) { fnSuc && fnSuc(ret); }; } ); }; u.get = function(/*url,fnSuc,dataType*/){ var argsToJson = parseArguments.apply(null, arguments); var json = {}; var fnSuc = argsToJson.fnSuc; argsToJson.url && (json.url = argsToJson.url); //argsToJson.data && (json.data = argsToJson.data); if(argsToJson.dataType){ var type = toLowerCase(argsToJson.dataType); if (type == 'text'||type == 'json') { json.dataType = type; } }else{ json.dataType = 'text'; }; json.method = 'get'; api.ajax(json, function(ret,err){ if (ret) { fnSuc && fnSuc(ret); }; } ); }; /*end*/ window.$api = u; })(window);
和Zepto一样,适用于移动前端开发框架,不适用与桌面设备。
.trim()
- 描述:去掉字符串首尾空格
- 用法:trim(str)
- 参数: str (类型:String)
- 返回值:去除首尾空格的字符串
- 示例:
$api.trim(' abc 123 '); // => "abc 123"
.trimAll()
- 描述:去掉字符串所有空格
- 用法:trimAll(str)
- 参数:str (类型:String)
- 返回值:去除所有空格的字符串
- 示例:
$api.trimAll(' abc 123 '); // => "abc123"
.isArray()
- 描述:判断对象是否为数组
- 用法:.isArray(obj)
- 参数: obj (类型:Object)
- 返回值:Boolean
- 示例:
$api.isArray([1,2,3]); // => true $api.isArray('123') // => false
.addEvt()
- 描述:为DOM元素绑定事件
- 用法:.addEvt(el, name, fn, useCapture)
- 参数:el (类型:Element):DOM元素
name (类型:String):事件类型
fn (类型:Function):事件回调
useCapture (类型:Boolean):事件捕获,默认为 false
- 示例:
$api.addEvt(element, 'click', function(){ //do something });
.rmEvt()
- 描述:移除DOM元素绑定的事件
- 用法:.rmEvt(el, name, fn, useCapture)
- 参数:el (类型:Element):DOM元素
name (类型:String):事件类型
fn (类型:Function):事件回调
useCapture (类型:Boolean):事件捕获,默认为 false
- 示例:
$api.rmEvt(element, 'click', function(){ //do something });
.one()
- 描述:为DOM元素绑定事件,事件只执行一次
- 用法:.one(el, name, fn, useCapture)
- 参数:el (类型:Element):DOM元素
name (类型:String):事件类型
fn (类型:Function):事件回调
useCapture (类型:Boolean):事件捕获,默认为 false
- 示例:
$api.one(element, 'click', function(){ //do something });
.dom()
- 描述:选择首个匹配的DOM元素
- 用法:.dom(el, selector)
从el元素开始查找
- 参数:
el (类型:Element):DOM元素selector (类型:Selector):CSS 选择器 - 返回值: 返回首个匹配的DOM元素
- 示例:
$api.dom(el, '#id'); $api.dom(el, '.list[type="text"]');
.dom(selector)
从document元素开始查找
- 参数: selector (类型:Selector):CSS 选择器
- 返回值:返回首个匹配的DOM元素
- 示例:
$api.dom('#id'); $api.dom('.list[type="text"]');
.domAll()
- 描述:选择所有匹配的DOM元素
- 用法:.domAll(el, selector)
从el元素开始查找
- 参数:el (类型:Element):DOM元素
selector (类型:Selector):CSS 选择器
- 返回值: 返回所有匹配的DOM元素
- 示例:
$api.domAll(el, '.class'); $api.dom(el, '.list:fist-child');
.domAll(selector)
从document元素开始查找
- 参数: selector (类型:Selector):CSS 选择器
- 返回值:返回所有匹配的DOM元素
- 示例:
$api.domAll('.class'); $api.dom('.list:fist-child');
.byId()
- 描述:通过Id选择DOM元素
- 用法:.byId(id)
- 参数: id(类型:String):CSS id 字符串
- 返回值: 返回匹配的DOM元素
- 示例:
$api.byId('idStr')
.first()
- 描述:选择DOM元素的第一个子元素
- 用法:.first(el, selector)
- 参数: el (类型:Element):DOM元素
- 返回值: 返回DOM元素的第一个子元素
- 示例:
$api.first(el,'li');
first(el)
- 参数:el (类型:Element):DOM元素
- 返回值:返回DOM元素的第一个子元素
- 示例:
$api.first(el);
.last()
- 描述:选择DOM元素的最后一个子元素
- 用法:.last(el, selector)
- 参数: el (类型:Element):DOM元素
- 返回值: 返回DOM元素的最后一个子元素
- 示例:
$api.last(el,'li');
.last(el)
- 参数: el (类型:Element):DOM元素
- 返回值:返回DOM元素的最后一个子元素
- 示例:
$api.last(el);
.eq()
- 描述:选择第几个子元素
- 用法:.eq(el, index)
- 参数:el (类型:Element):DOM元素
index (类型:String | Number):索引值
- 返回值:根据索引值返回子元素
- 示例:
$api.eq(el, 2); $api.eq(el, '2');
.not()
- 描述:根据排除选择器选择子元素
- 用法:.not(el, selector)
- 参数:el (类型:Element):DOM元素
selector (类型:Selector):CSS 选择器
- 返回值:返回不匹配选择器的所有子元素
- 示例:
$api.not(el, '.active');
.prev()
- 描述:选择相邻的前一个元素
- 用法:.prev(el)
- 参数:el (类型:Element):DOM元素
- 返回值:返回前一个元素
- 示例:
$api.prev(el);
.next()
- 描述:选择相邻的下一个元素
- 用法:.next(el)
- 参数:el (类型:Element):DOM元素
- 返回值:返回下一个元素
- 示例:
$api.next(el);
.contains()
- 描述:判断某一个元素是否包含目标元素
- 用法:.contains(parentEl, targetEl)
- 参数:parentEl (类型:Element):DOM元素
targetEl (类型:Element):DOM元素
- 返回值:返回布尔值(true 或 false)
- 示例:
$api.contains(parentEl, targetEl);
.closest()
- 描述:根据选择器匹配最近的父元素
- 用法:.closest(el, selector)
- 参数:el (类型:Element):DOM元素
selector (类型:Selector):CSS 选择器
- 返回值:根据选择器匹配最近的父元素
- 示例:
$api.closest(el, '.parent');
.remove()
- 描述:移除DOM元素
- 用法:.remove(el)
- 参数:el (类型:Element):DOM元素
- 示例:
$api.remove(el);
.attr()
- 描述:获取或设置DOM元素的属性
- 用法:.attr(el, name, value)
设置属性值
- 参数:el (类型:Element):DOM元素
name (类型:String):属性名
value (类型:String):属性值
- 返回值: 返回当前DOM元素
- 示例:
$api.attr(el,'data','123');
.attr(el, name)
获取属性值
- 参数:el (类型:Element):DOM元素
name (类型:String):属性名
- 返回值:返回属性值
- 示例:
$api.attr(el,'data');
.removeAttr()
- 描述:移除DOM元素的属性
- 用法:.removeAttr(el, name)
- 参数:el (类型:Element):DOM元素
name (类型:String):属性名
- 示例:
$api.removeAttr(el, 'data')
.hasCls()
- 描述:DOM元素是否含有某个className
- 用法:.hasCls(el, cls)
- 参数:el (类型:Element):DOM元素
cls (类型:String):className
- 返回值:Boolean
- 示例:
$api.hasCls(el, 'classname'); // => true
.addCls()
- 描述:为DOM元素增加className
- 用法:.addCls(el, cls)
- 参数:el (类型:Element):DOM元素
cls (类型:String):className
- 返回值:返回当前DOM元素
- 示例:
$api.addCls(el, 'newclass');
.removeCls()
- 描述:移除指定的className
- 用法:.removeCls(el, cls)
- 参数:el (类型:Element):DOM元素
cls (类型:String):className
- 返回值:返回当前DOM元素
- 示例:
$api.removeCls(el, 'newclass');
.toggleCls()
- 描述:切换指定的className
- 用法:.toggleCls(el, cls)
- 参数:el (类型:Element):DOM元素
cls (类型:String):className
- 返回值:返回当前DOM元素
- 示例:
$api.toggleCls(el, 'display');
.val()
- 描述:获取或设置常用 Form 表单元素的 value 值
- 用法:.val(el, val)
设置表单元素value值
- 参数:el (类型:Element):DOM元素
val (类型:String):想设置的value值
- 返回值:返回当前DOM元素
- 示例:
$api.val(el,'123');
.val(el)
获取表单元素value值
- 参数:el (类型:Element):DOM元素
- 返回值:返回表单元素的value值
- 示例:
$api.val(el);
.prepend()
- 描述:在DOM元素内部,首个子元素前插入HTML字符串
- 用法:.prepend(el, html)
- 参数:el (类型:Element):DOM元素
html (类型:htmlString):HTML字符串
- 返回值:返回当前DOM元素
- 示例:
$api.prepend(el,'<li>hello</li>');
.append()
- 描述:在DOM元素内部,最后一个子元素后面插入HTML字符串
- 用法:.append(el, html)
- 参数:el (类型:Element):DOM元素
html (类型:htmlString):HTML字符串
- 返回值:返回当前DOM元素
- 示例:
$api.append(el,'<li>hello</li>');
.before()
- 描述:在DOM元素前面插入HTML字符串
- 用法:.before(el, html)
- 参数:el (类型:Element):DOM元素
html (类型:htmlString):HTML字符串
- 返回值:返回当前DOM元素
- 示例:
$api.before(el,'<h1>world</h1>');
.after()
- 描述:在DOM元素后面插入HTML字符串
- 用法:.after(el, html)
- 参数:el (类型:Element):DOM元素
html (类型:htmlString):HTML字符串
- 返回值:返回当前DOM元素
- 示例:
$api.after(el,'<h1>world</h1>');
.html()
- 描述:获取或设置DOM元素的innerHTML
- 用法:.html(el, html)
设置innerHTML
- 参数:el (类型:Element):DOM元素
html (类型:htmlString):HTML字符串
- 返回值:返回当前DOM元素
- 示例:
$api.html(el,'<h1>world</h1>');
.html(el)
获取innerHTML
- 参数:el (类型:Element):DOM元素
- 返回值:返回当前DOM元素的innerHTML
- 示例:
$api.html(el);
.text()
- 描述:设置或者获取元素的文本内容
- 用法:. text (el, txt)
- 参数:el(类型:Element):DOM元素
txt(类型:String):字符串
- 返回值:当前DOM元素
- 示例:
var a = document.getElementById(' a'); $api.text(a, 'text'); // => <a id='' a''>text</a>
. text (el)
- 参数:el(类型:Element):DOM元素
- 返回值:DOM元素的文本内容
- 示例:
<a id='' a''>text</a> var a = document.getElementById(' a'); $api.text(a); // => text
.offset()
- 描述:获取元素在页面中的位置与宽高,(此为距离页面左侧及顶端的位置,并非距离窗口的位置)
- 用法:. offset (el)
- 参数:el(类型:Element):DOM元素
- 返回值:该元素的位置(left,top)及宽高(width,height),返回值是json类型的,包括l,t,w,h属性
- 示例:
$api.offset (el);
.css()
- 描述:设置所传入的DOM元素的样式,可传入多条样式
- 用法:. css (el, css)
- 参数:el(类型:Element):DOM元素
css(类型:String):想要设置的CSS样式
- 示例:
$api.css (el,'width:800px;border:1px solid red');
.cssVal()
- 描述:获取指定DOM元素的指定属性的完整的值,如800px
- 用法:. cssVal (el, prop)
- 参数:el(类型:Element):DOM元素
prop(类型:String):CSS属性
- 返回值:完整的CSS属性值
- 示例:
$api.cssVal(el,'width'); // => 800px
.jsonToStr()
- 描述:将标准的JSON 对象转换成字符串格式
- 用法:. jsonToStr (json)
- 参数:json(类型:JSON)
- 返回值:转换后的字符串
- 示例:
var json = {a:111, b:222}; $api.jsonToStr(json); // => "{"a":111,"b":222}"
. strToJson ()
- 描述:将JSON字符串转换成JSON对象
- 用法:. strToJson (str)
- 参数:str(类型:String):JSON字符串
- 返回值:JSON对象
- 示例:
var a = '{"a":"111", "b":"222"}'; $api.strToJson(a); // => Object {a: "111", b: "222"}
.setStorage()
- 描述:设置localStorage数据
- 用法:. setStorage (key,value)
- 参数:key(类型:String):键名
value(类型:任意类型):值
- 示例:
$api.setStorage('name','Tom');
.getStorage()
- 描述:获取localStorage数据,必须与$api.setStorage()配套使用
- 用法:. getStorage (key)
- 参数:key(类型:String):键名
- 返回值:localStorage中与键名对应的值
- 示例:
$api.getStorage('name'); // => "Tom"
.rmStorage()
- 描述:清除localStorage中与键名对应的值
- 用法:. rmStorage (key)
- 参数:key(类型:String):键名
- 示例:
$api.rmStorage('name')
.clearStorage ()
- 描述:清除localStorage的所有数据,慎用
- 用法:. clearStorage ()
- 示例:
$api.clearStorage ();
.fixIos7Bar()
- 描述:适配iOS7+系统状态栏,为传入的DOM元素增加20px的上内边距
- 用法:. fixIos7Bar (el)
- 参数:el (类型:Element) : DOM元素
- 备注:自动识别iOS7+,避免应用与状态栏重叠,无法跟config.xml里面的一起使用。
- 示例:
$api.fixIos7Bar(header);
.toast()
- 描述:延时提示框
- 用法:.toast(title,text,time)
- 参数:title (类型:String) : 标题(可选参数)
text(类型:String):内容(可选参数)
time(类型:Number):延时的时间(可选参数),单位为毫秒,默认值为500
- 示例:
$api.toast('你好啊'); $api.toast(2000); $api.toast('你好啊',2000); $api.toast('你好啊','hello'); $api.toast('演示', '延时提示框',1000);
.get()
- 描述:api.ajax()方法的get方式简写
- 用法:.get(url,fnSuc,dataType)
- 参数:url (类型:String) : url(必传参数)
fnSuc (类型:Function):成功回调函数(可选参数)
dataType(类型:String):返回值的类型(可选参数),有text与json两种类型,默认为json
- 返回值:根据dataType在成功回调函数里返回相应数据
- 示例:
$api.get('http://www.pm25.in/api/querys/pm2_5.json?city=beijing&token=5j1znBVAsnSf5xQyNQyq',function(ret){ alert(ret); },'text');
.post()
- 描述:api.ajax()方法的post方式简写
- 用法:.post(url,data,fnSuc,dataType)
- 参数:url (类型:String) :url(必传参数)
data(类型:JSON): 可以有body:请求体(字符串类型)values:post参数(JSON对象)
files:post文件(JSON对象)等参数(可选参数)
fnSuc (类型:Function):成功回调函数(可选参数)
dataType(类型:String):返回值的类型(可选参数),有text与json两种类型,默认为json
- 返回值:向url地址发送ajax请求,并发送数据data,根据dataType在成功回调函数返回相应数据
- 示例:
$api.post('http://192.168.1.233:4321/getString',{ body: 'String' },function(ret){ alert(ret); },'text');