JX Cheat Sheet

Common Used Methods 常用方法

J = Jx()

J.isUndefined(o)
判断变量的值是否是 undefined
J.isNull(o)
判断变量的值是否是 null
J.isNumber(o)
判断变量的类型是否是 Number
J.isString(o)
判断变量的类型是否是 String
J.isBoolean(o)
判断变量的类型是否是 Boolean
J.isObject(o)
判断变量的类型是否是 Object
J.isArray(o)
判断变量的类型是否是 Array
J.isArguments(o)
判断变量的类型是否是 Arguments
J.isFunction(o)
判断变量的类型是否是 Function
J.$typeof(o)
判断变量类型
J.$return(val)
生成一个返回值是传入的 val 值的函数
J.$try(funcA, funcB, funcC...)
从第一个函数开始try,直到尝试出第一个可以成功执行的函数就停止继续后边的函数,并返回这个成功执行的函数结果
J.extend(beExtendObj, extendObj1, extendObj2)
对一个对象或数组进行扩展
J.clone(o)
克隆一个对象
J.getLength(obj)
获取对象自身具有的属性和方法的数量
J.random(min, max)
生成随机数
J.now()
获取当前时间时间戳
J.timedChunk(items, process, context, isShift, callback)
通用分时处理函数
J.emptyFunc()
生成一个空函数
J.rebuild(func, option)
函数的重构方法
J.pass(func, var_args)
给函数传入参数并执行
J.bind(func, context, var_args)
给函数绑定一个上下文对象再执行
J.bindNoEvent
TODO
J.checkJSON
TODO
new J.Class({extend: SuperClass}, {init: function(){},...})
创建类
new J.Chunk(items, process, context, isShift, callback)
创建分时处理类

D = Jx().dom

D.getDoc(element)
获取元素所属的根文档
D.id(id, doc)
根据 id 获取元素
D.name(name, doc)
根据 name 属性获取元素
D.tagName(tagName, el)
根据 tagName 获取元素
D.getText(element)
获取元素中的文本内容
D.getAttributeByParent(attribute, startNode, topNode)
从起始元素查找某个属性,直到找到,或者到达顶层元素位置
D.node(type, attrObj, win)
生成一个 DOM 节点
D.getScrollHeight(el)
获取文档的 scroll 高度,即文档的实际高度
D.getScrollWidth(el)
获取文档的 scroll 宽度,即文档的实际宽度
D.getClientHeight(el)
获取元素内高度
D.getClientWidth(el)
获取元素内宽度
D.getOffsetHeight(el)
获取元素的外高度
D.getOffsetWidth(el)
获取元素的外宽度
D.getScrollLeft(el)
获取元素的左边已卷动的宽度
D.getScrollTop(el)
获取元素的上边已卷动的宽度
D.setClass(el, className)
设置元素的class属性
D.getClass(el)
获取元素的class属性
D.hasClass(el, className)
判断元素是否含有 class
D.addClass(el, className)
给元素添加 class
D.removeClass(el, className)
给元素移除 class
D.toggleClass(el, className)
对元素 class 的切换方法,即:如果元素用此class则移除此class,如果没有此class则添加此class
D.replaceClass(el, oldClassName, newClassName)
替换元素 oldClassName 为 newClassName
D.setStyle(el, styleName, value)
设置元素的样式,css 属性需要用驼峰式写法,如:fontFamily
D.getStyle(el, styleName)
获取元素的当前实际样式,css 属性需要用驼峰式写法,如:fontFamily
D.addCssText(el, cssText)
添加元素cssText
D.setCssText(el, cssText)
重置元素cssText
D.getCssText(el)
获取元素cssText
D.show(el, displayStyle)
以指定方式如:block,inline,inline-block 显示元素
D.hide(el)
获取元素cssText
D.recover(el)
还原元素原来的display属性
D.isShow(el)
判断元素是否是显示状态
D.getXY(el)
获取元素坐标
D.setXY(el, x, y)
设置元素坐标
D.getRelativeXY(el, relativeEl)
获取元素相对于其他元素坐标
D.getPosX(el)
获取元素left值
D.getPosY(el)
获取元素top值
D.getWidth(el)
获取元素宽度
D.getHeight(el)
获取元素高度
D.getSelectionText(win)
获取选择的文本
D.getTextFieldSelection(el)
获取元素高度
D.contains(parent, child, containSelf)
判断一个节点是否是某个父节点的子节点

E = Jx().event

E.onDomReady(handler)
文档加载完成时事件监听器
E.addEventListener/on(element, eventType, handler,options)
元素添加事件监听器
E.removeEventListener/off(element, eventType, handler)
元素移除事件监听器
E.addObserver(targetModel, eventType, handler)
为自定义Model添加事件监听器
E.addObservers({targetModel : {eventType:handler,eventType2:handler2...} ,... })
批量为自定义Model添加事件监听器
E.notifyObservers(targetModel, eventType, argument)
触发自定义Model事件的监听器
E.removeObserver(targetModel, eventType, handler)
移除自定义 Model 事件监听器
new E.Publish()
消息源发布者的类

JSON = Jx().json

JSON.parse(text, reviver)
解析JSON格式字符串
JSON.stringify(value, replacer, space)
序列化为JSON格式字符串

Jx().date.format(date, formatString)

让日期和时间按照指定的格式显示的方法

var d = new Date(); // 以 YYYY-MM-dd hh:mm:ss 格式输出 d 的时间字符串 J.date.format(d, "YYYY-MM-DD hh:mm:ss");

Jx().number.format(num, pattern)

让日期和时间按照指定的格式显示的方法

J.number.format(12345.999,'#,##0.00'); //out: 12,34,5.99 J.number.format(12345.999,'0'); //out: 12345 J.number.format(1234.888,'#.0'); //out: 1234.8 J.number.format(1234.888,'000000.000000'); //out: 001234.888000

C = Jx().cookie

C.set(name, value, domain, path, hour)
设置一个cookie
C.get(name)
获取指定名称的cookie值
C.remove(name, domain, path)
删除指定cookie,复写为过期

Important Methods 重要方法

H = Jx().http

示例代码:

H.ajax("cgi.web2.qq.com",{ method: "GET", data: null, arguments: null, onSuccess: function(){}, onError: function(){}, onComplete: function(){}, onTimeout: function(){}, isAsync: true, timeout: 30000, contentType: "utf-8", type: "xml" });
H.ajax(uri, options)
Ajax方式请求
H.comet(url, option)
comet方式请求
H.load(type, uri, options)
加载样式或脚本文件
H.loadCss(url, option)
加载样式文件
H.loadScript(url, option)
加载脚本文件
H.formSend(url, option)
Form方式请求

S = Jx().string

S.toString(o)
将任意变量转换为字符串的方法
S.template(string, data)
多行或单行字符串模板处理
S.isURL(string)
判断是否是一个可接受的 url 串
S.parseURL(string)
分解 URL 为一个对象,成员为:scheme, user, pass, host, port, path, query, fragment
S.buildURL(obj)
将一个对象(成员为:scheme, user, pass, host, port, path, query, fragment)重新组成为一个字符串
S.mapQuery(uri)
将 uri 的查询字符串参数映射成对象
S.test(string, regex, params)
test的方法
S.contains(string1, string2, separator)
判断是否含有指定的字符串
S.trim(string)
清除字符串开头和结尾的空格
S.clean(string)
清除字符串开头和结尾的空格,并把字符串之间的多个空格转换为一个空格
S.camelCase(string)
将“-”连接的字符串转换成驼峰式写法
S.hyphenate(string)
将驼峰式写法字符串转换成“-”连接的
S.capitalize(string)
将字符串转换成全大写字母
S.escapeRegExp(string)
转换 RegExp 正则表达式
S.toInt(string, base)
将字符串转换成整数
S.toFloat(string)
将字符串转换成浮点数
S.toSingleLine(string)
将带换行符的字符串转换成无换行符的字符串
S.toHtml(string)
将字符串转换成html源码
S.toTitle(string)
将字符串转换成用于title的字符串
S.toQueryPair(key, value)
生成已编码的请求字符串对格式 foo1=1
S.toQueryString(obj)
生成已编码的请求字符串格式 foo1=1&foo2=2&foo3=3
S.hexToRgb(string, array)
将颜色 Hex 写法转换成 RGB 写法
S.rgbToHex(string, array)
将颜色 RGB 写法转换成 Hex 写法
S.stripScripts(string, option)
脱去script标签
S.substitute(string, object, regexp)
按规则替换字符串
S.replaceAll(string, reallyDo, replaceWith, ignoreCase)
全局替换指定的字符串
S.byteLength(string)
计算字符串的字节长度
S.cutRight(string, n)
截取指定长度字符串
S.isNumber(string)
是否为数字
S.isEmail(string)
是否为邮箱格式字符
S.cutByBytes(string,n)
截取指定字节长度的字符串
S.encodeHtmlSimple(string)
html正文编码:对需要出现在HTML正文里(除了HTML属性外)的不信任输入进行编码
S.decodeHtmlSimple(string)
html正文解码:对HtmlEncode函数的结果进行解码
S.decodeHtmlSimple2(string)
S.encodeHtmlAttributeSimple(string)
html属性编码:对需要出现在HTML属性里的不信任输入进行编码,注意:
  1. 该函数不适用于属性为一个URL地址的编码.这些标记包括:a/img/frame/iframe/script/xml/embed/object... 属性包括:href/src/lowsrc/dynsrc/background/...
  2. 该函数不适用于属性名为 style="[Un-trusted input]" 的编码
S.encodeHtmlAttribute(string)
用做过滤HTML标签里面的东东 比如这个例子里的<input value="XXXX"> XXXX就是要过滤的
S.encodeHtml(string)
用做过滤直接放到HTML里的
S.encodeScript(string)
用做过滤直接放到HTML里js中的
S.encodeHtml(string)
用做过滤直接放到HTML里的
S.encodeHrefScript(string)
用做过滤直接放到<a href="javascript:XXXX">中的
S.encodeRegExp(string)
用做过滤直接放到正则表达式中的
S.encodeUrl(string)
用做过滤直接URL参数里的 比如 http://show8.qq.com/abc_cgi?a=XXX XXX就是要过滤的
S.encodeUriComponent(string)
对需要出现在一个URI的一部分的不信任输入进行编码,例如:
对 <a href="http://search.msn.com/results.aspx?q1=[Un-trusted-input]& q2=[Un-trusted-input]">Click Here!</a>
除[a-zA-Z0-9.-_]以外的字符都会被替换成URL编码
S.vaildTencentUrl(url)
url转向验证,对通过javascript语句载入(或转向)的页面进行验证,防止转到第三方网页和跨站脚本攻击

合法的值
  • http://xxx.qq.com/hi/redirect.html?url=http://www.qq.com
  • http://xxx.qq.com/hi/redirect.html?url=a.html
  • http://xxx.qq.com/hi/redirect.html?url=/a/1.html
非法的值
  • http://xxx.qq.com/hi/redirect.html?url=http://www.baidu.com
  • http://xxx.qq.com/hi/redirect.html?url=javascript:codehere
  • http://xxx.qq.com/hi/redirect.html?url=//www.qq.com
S.vaildUrl(url)
验证并规格化URL: http://web.qq.com/
S.getCharWidth(str,fontsize)
获取字符实际显示宽度
S.cutByWidth(str,fontsize,width)
截取字符串显示宽度

A = Jx().array

A.indexOf(arr, obj, fromIndex)
正向查找数组元素在数组中的索引下标
A.lastIndexOf(arr, obj, fromIndex)
反向查找数组元素在数组中的索引下标
A.forEach(arr, fun /*, contextObj*/)
遍历数组,把每个数组元素作为第一个参数来执行函数
A.filter(arr, fun /*, contextObj*/)
用一个自定义函数来过滤数组
A.some(arr, fun /*, contextObj*/)
遍历数组,把每个数组元素作为第一个参数来执行函数,如果有任意一个或多个数组成员使得函数执行结果返回 true,则最终返回 true,否则返回 false
A.map(arr, fun /*, contextObj*/)
遍历数组,把每个数组元素作为第一个参数来执行函数,并把函数的返回结果以映射的方式存入到返回的数组中
A.every(arr, fun /*, contextObj*/)
遍历数组,把每个数组元素作为第一个参数来执行函数,如果所有的数组成员都使得函数执行结果返回 true,则最终返回 true,否则返回 false
A.reduce(arr, fun /*, contextObj*/)
该数组的每项和前一次调用的结果运行一个函数,收集最后的结果。
A.reduceRight(arr, fun /*, contextObj*/)
与A.reduce功能一致,但从右向左执行
A.toArray(o)
将任意变量转换为数组的方法
A.remove(arr, members)
从数组中移除一个或多个数组成员
A.replace(arr, oldValue, newValue)
替换一个数组成员
A.bubbleSort(arr, compareFunc)
冒泡排序,默认从小到大排序
A.binarySearch(arr, item, compareFunc)
二叉搜索
A.contains(arr, o)
判断arr是否包含元素o
A.uniquelize(arr)
唯一化一个数组,由不重复元素构成
A.intersect(arr1, arr2)
求两个集合的交集
A.minus(arr1, arr2)
求两个集合的差集
A.union(arr1, arr2)
求两个集合的并集

Object-Oriented 面向对象

Jx().$package 创建包

以alloy.app.demo.js为例:

//创建一个匿名package包: Jx().$package(function(J){ //这时上下文对象this指向全局window对象 alert("Hello world! This is " + this); }; //创建一个名字为alloy.app.demo的package包: Jx().$package("alloy.app.demo", function(J){ //这时上下文对象this指向window对象下的alloy.app.demo对象 alert("Hello world! This is " + this); };

new J.Class() 创建类

以创建Programer类为例:

Jx().$package(function(J){ // 创建Person类 var Person = new J.Class({ init : function(name){ this.name = name; alert("init"); }, showName : function(){ alert(this.name); } }); // 继承Person类 var Programer = new J.Class({extend : Person}, { init : function(name){ this.name = name; alert("init"); }, showName : function(){ alert(this.name); } }); };

new ClassName() 创建实例

var p1= new Programer("yuanyan1"); var p2= new Programer("yuanyan2");

附:Browser Events 常用浏览器事件

事件 说明
click 鼠标点击时触发此事件
dblclick 鼠标双击时触发此事件
mousedown 按下鼠标时触发此事件
mouseup 鼠标按下后松开鼠标时触发此事件
mouseover 当鼠标移动到某对象范围的上方时触发此事件
mousemove 鼠标移动时触发此事件
mouseout 当鼠标离开某对象范围时触发此事件
keypress 当键盘上的某个键被按下在释放时触发此事件
keydown 当键盘上某个按键被按下时触发此事件
keyup 当键盘上某个按键被按放开时触发此事件
error 出现错误时触发此事件
load 页面内容完成时触发此事件
move 浏览器的窗口被移动时触发此事件
resize 当浏览器的窗口大小被改变时触发此事件
scroll 浏览器的滚动条位置发生变化时触发此事件
blur 当前元素失去焦点时触发此事件
change 当前元素失去焦点并且元素的内容发生改变而触发此事件
focus 当某个元素获得焦点时触发此事件
submit 一个表单被递交时触发此事件
copy 当页面当前的被选择内容被复制后触发此事件
paste 当内容被粘贴时触发此事件
dragdrop 一个外部对象被鼠标拖进当前窗口或者帧
select 当文本内容被选择时的事件
selectstart 当文本内容选择将开始发生时触发的事件
drag 元素被拖动事件
contextmenu 鼠标右键菜单事件
mousewheel 鼠标滚轮事件
customclick 自定义点击事件 [自定义事件]
mouseenter 鼠标进入事件 [自定义事件]
mouseleave 鼠标离开事件 [自定义事件]