页面基本结构,保障产品组件正常显示
<!DOCTYPE html>
<html class="over_hidden h100b">
<head>
<title></title>
</head>
<body class="over_hidden h100b">
</body>
</html>
"over_hidden h100b"是实现界面高度自适应的基础样式。
seeyon/ ├── common/ │ ├── all-min.css /*公用样式包*/ │ └── js/ │ ├── v3x-debug.js /*v3x依赖js*/ │ └── ui/ /*组件js*/ │ ├── seeyon.ui.layout-debug.js │ ├── seeyon.ui.grid-debug.js │ └── ... │── skin/ │ ├── dist/ /*生产环境使用的css文件*/ │ │ └── common │ │ └── skin.css /*默认皮肤*/ │ │ └── components │ │ └── components_layout.css /*组件的布局css*/ │ │ └── components_theme_default.css /*组件的皮肤css*/ │ │ └── images │ │ └── skin.css /*图标、图片等*/ │ │ └── modules │ │ └── skin.css /*业务模块,如文化建设的css*/ │ ├── src/ /*scss源文件*/ │ │ └── common /*公用样式scss源文件目录*/ │ │ └── components /*组件样式scss源文件目录*/ │ │ └── modules /*业务模块样式scss源文件目录*/ └── main/ │ ├── login/ /*【登陆页皮肤】*/ │ │ ├── default/ /*默认皮肤*/ │ ├── frames/ │ │ └── desktop /*工作桌面-公用样式及图片,供VJOIN使用*/ │ └── skin/ │ ├── frame /*【首页框架皮肤】*/ │ │ ├── default /*默认),供VJOIN使用*/ │ └── desktop /*【工作桌面皮肤】*/ │ ├── harmony /*和谐之美(默认),供VJOIN使用*/ └── portal/ /*7.0门户*/ └── images/ /*图片*/ └── icons/ /*图标/* │ ├── default │ ├── fonts │ │ └──line /*线型图标*/ │ │ └──plane /*面型图标*/ └── pagelayout/ │ ├── element /*PC端门户主框架元素*/ │ ├── element_mobile /*移动端门户主框架元素*/*/ │ ├── layout /*PC端门户模板布局*/ │ ├── layout_mobile /*移动端门户模板布局*/ │ ├── skin /*PC端门户主框架元素的皮肤*/ │ ├── skin_mobile /*移动端门户主框架元素的皮肤*/*/ └── sections/ │ ├── component /*PC端栏目需要的组件*/ │ ├── skin /*PC端栏目样式*/ │ ├── tpl /*PC端栏目模板*/ └── ├── tpl_mobile /*移动端栏目模板*/
seeyon/ ├── common/ │ ├── all-min.css /*公用样式包*/ │ └── js/ │ ├── v3x-debug.js /*v3x依赖js*/ │ └── ui/ /*组件js*/ │ ├── seeyon.ui.layout-debug.js │ ├── seeyon.ui.grid-debug.js │ └── ... │── skin/ │ ├── default/ /*默认皮肤*/ │ │ └── skin.css │ └── GOV_red/ /*政务皮肤*/ │ └── skin.css └── main/ ├── login/ /*【登陆页皮肤】*/ │ ├── default/ /*A8*/ │ ├── default-A6/ /*A6*/ │ ├── default-A6s/ /*A6s*/ │ ├── default-A6-U8/ /*A6-U8*/ │ ├── default-A8s-U8/ /*A8s-U8*/ │ ├── default-G6/ /*政务*/ │ └── scroll/ /*多图*/ ├── frames/ │ ├── defaultV51 │ │ └── index.css /*首页框架-公用样式*/ │ └── desktop │ └── index.css /*工作桌面-公用样式*/ └── skin/ ├── frame /*【首页框架皮肤】*/ │ ├── harmony /*和谐之美(默认)*/ │ ├── peaceful /*宁静之韵*/ │ ├── wisdom /*智慧之美*/ │ ├── GOV_red /*政务-红*/ │ └── GOV_blue /*政务-蓝*/ └── desktop /*【工作桌面皮肤】*/ ├── harmony /*和谐之美(默认)*/ ├── peaceful /*宁静之韵*/ ├── wisdom /*智慧之美*/ ├── GOV_red /*政务-红*/ └── GOV_blue /*政务-蓝*/
seeyon/ └── common/ ├── skin/ │ ├── default/ │ │ ├── skin.css /*默认样式*/ │ │ └── images │ │ └── xmenu │ │ └── toolbar.trip.png /*toolbar定位图片*/ │ └── GOV_red/ │ └── skin.css /*政务样式*/ └── js/ └── V3X.js /*组件js*/
IE8+、Chrome、Firefox、360、Safari。
IE9+、Chrome、Firefox、360、Safari。低版本浏览器抛弃圆角、过度动画等效果。部分页面在IE11下采用降级到IE9显示处理方式。
javascript模块化的第一条规则:一个模块不应该为全局名字空间添加多于一条的标记.通俗的讲:除了给全局命名空间定义一个模块的命名空间,其它的你一句代码都不要写
1.防止全局变量被覆盖
2.减少全局变量个数
//js文件名和命名空间名保持一致
//全局变量和函数保存在命名空间中
//Collaboration.js
var Collaboration;
if(!Collaboration) Collaboration = {};//第一级域名
Collaboration.xxx = xxx;//变量
Collaboration.函数名1=function(){ //函数
}
//---------------------------------------------------------------------------------------
//如果js文件名相同,则需要将不同的js放到不同的目录,则需要定义多级
var com;
if(!com) com={};//如果com不存在,则新生成一个
else if(typeof com!="object"){//如果已存在,但不是一个对象,则抛出一个异常
throw new Error("com already exists and is not an object");
}
if(!com.util) com.util={};//如果com.util不存在则新生成一个
else if(typeof com.util!="object"){//如果com存在,但不是一个对象,则抛出一个异常
throw new Error("com.util already exists and is not an object");
}
if(!com.util.Collaboration){//如果com.util.ModuleClass存在,则直接抛出异常
throw new Error("com.util.Collaboration already exists");
}
com.util.Collaboration = {//在com.util.Collaboration不存在的情况下,我们才能正常使用在此命名空间下定义的代码
函数1:function(){ 函数体;},
函数2:function(){ 函数体;}
};
符合 web 标准, 语义化 html, 结构表现行为分离, 兼容性优良. 页面性能方面, 代码要求简洁明了有序, 尽可能的减小服务器负载, 保证最快的解析速度。
驼峰式命名法:是指混合使用大小写字母来构成单词的名称(适用于两个不同的单词链接如:rightContent)[用于js中]
下划线命名法:两个单词间用”_”相连,如 menu_title(适用于上下级关系,可以准确表示两个单词间的层级关系。)[用于css或js中]
Html、css、js、images 文件命名:单个单词采用全英文小写,多个单词采用驼峰式命名。
声明类型统一<!DOCTYPE html> ,新开发框架在html上方引入common.jsp
标签和属性一律小写,属性值用双引号包括
给区块代码加上注释, 方便后台添加功能
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/jsp/common/common.jsp"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>title</title>
</head>
<body>
<div id="layout" class="comp" comp="type:'layout'">
<div class="layout_north bg_color" id="north">
<%-- 如果是业务生成器创建的一个列表菜单,则不显示面包屑 --%>
<c:if test="${param.srcFrom ne 'bizconfig' }">
<div class="comp" comp="type:'breadcrumb',comptype:'location',code:'F01_listDone'"></div>
</c:if>
<div id="toolbars"></div>
</div>
<div class="layout_center over_hidden" id="center">
</div>
</div>
</body>
</html>
在变量定义的上一行用双斜杠(//)注释,注释单占一行
在方法头部详细说明该方法的功能,以及所传参数的意义
js书写规范参考java规范注意换行和分号
建议采用严格模式
"use strict";
//显示部门,默认是
var displayDepartment = true;
//显示组,默认是
var displayTeam = true;
//显示职务,默认否
var displayOtype = false;
/**
* 普通选人的对话框1
* 参数分别为 相对根目录路径,初始化要显示的人员,是否多选
* @param path1 路径
* @param initPerson1 初始化显示人员
* @param mutiple1 是否多选
*/
function selectPerson1(path1,initPerson1,mutiple1){
path = path1;
initPerson = initPerson1;
mutiple = mutiple1;
return showSimpleDialog();
}
将para对象的属性复制到tpl对象中 但如果是数组属性则不进行复制
/**
* 将para对象的属性复制到tpl对象中 但如果是数组属性则不进行复制
* @param tpl 目标对象
* @param para 被复制的对象
* @returns {*}
*/
$.extendParam = function(tpl, para) {
for ( var v in para) {
//如果是数组属性则不进行复制操作
if (!(para[v] instanceof Array)) {
tpl[v] = para[v];
}
}
return tpl;
};
调用列子
var par = {
contextPath : _ctxPath,
render : this[0].id
};
//类似jQuery的extend方法 这里是浅复制 如果是数组对象不进行copy操作
par = $.extendParam(par, options);
缓存控件对象
//全局对象 缓存控件对象
var attrObjs = [];
$.fn.attrObj = function(name, value) {
var obj;
//循环attrObjs 对象集合 从中获取当前元素对象 如果查找到则终止循环
for ( var i = 0; i < attrObjs.length; i++) {
if (attrObjs[i].o == this[0]) {
obj = attrObjs[i];
break;
}
}
//如果从缓存对象集合中未找到该对象 则将对象保存到缓存中
if (!obj) {
obj = new Object();
obj.o = this[0];
obj.v = new Object();
attrObjs.push(obj);
}
//将传入的对象跟名称进行保存
if (value) {
obj.v[name] = value;
} else {
return obj.v[name];
}
};
调用列子
//初始化工具栏
$.fn.toolbar = function(options) {
var par = {
contextPath : _ctxPath,
render : this[0].id
};
//类似jQuery的extend方法 这里是浅复制 如果是数组对象不进行copy操作
par = $.extendParam(par, options);
//调用该方法来创建工具栏对象
var myBar = new WebFXMenuBar(par), toolbarOpt = options.toolbar;
this.attrObj("toolbarObj", myBar);
。。。。。
}
判断一个日期是否在当前日期之前
调用列子
判断是否为合法的日期字符串
| 参数名称 | 参数类型 | 是否必输 | 说明 |
| szDate | str | 必输 | 必须是年月日格式,年要求四位,月日可以是长类型或者短类型,必须以'-'或者'/'作为分隔符 |
| isSave | boolean | 必输 | isSave为true时合法日期保存到当前日期对象 |
Date.prototype.getWeekStart=function(dateStr)
{
this.isDate(dateStr,true);
....
}
源代码
//功能:判断是否为合法的日期字符串
//参数:必须是年月日格式,年要求四位,月日可以是长类型或者短类型,必须以'-'或者'/'作为分隔符
// isSave为true时合法日期保存到当前日期对象
Date.prototype.isDate=function(szDate,isSave)
{
var re,regu;
var splitChar,Year,Month,Day;
var szArry;
var strObj=new String(szDate);
if(strObj.length<8 || strObj.length>10) return false;//判断日期的长度,完整的年,长短日期格式
regu="^([0-9]){4}(-|/)([0-9]){1,2}(-|/)([0-9]){1,2}$";//日期模板校验(以‘-’或者‘/’分割的日期)
re=new RegExp(regu);
if(strObj.search(re)==-1) return false;
splitChar=strObj.charAt(4);//年必须输入四位数字
szArry=strObj.split(splitChar);
if(szArry.length!=3) return false;
Year=parseInt(szArry[0],10);
Month=parseInt(szArry[1],10);
Day=parseInt(szArry[2],10);
if(Year<1900 || Year>2500) return false;
if(Month<1 || Month>12) return false;//月必须在1--12之间
if(Day<1 || Day>31) return false;//日必须在1-31之间
switch(Month)
{
case 4:
case 6:
case 9:
case 11:
if(Day>30) return false;
break;
case 2:
if((Year%4==0 && Year%100!=0) || Year%400==0)//润年2月份29天
{
if(Day>29) return false;
}
else
{
if(Day>28) return false;
}
break;
default: break;
}
if(isSave)
{
/**
* 设值顺序改为:先设定日、再设定月、再设定年,避免出现如下Bug:
* 日期变量2010-01-30调用此方法,参数为('2010-02-01', true)后日期变量会变为2010-03-01(应该为2010-02-01)
* 因为先设定月,再设定日,此时该值为2010-02-30,超出2月天数,此时系统自动将其月份改为3月
*/
this.setDate(Day);
this.setMonth(Month-1);
this.setYear(Year);
}
return true;
}
将日期字符串转换成日期对象,但该方法并没有Date.parseDate方法强大,parseDate是简单封装和转换,而Date.parseDate是calendar-debug.js提供,该方法可以指定字符串的格式进行转换。
| 参数名称 | 参数类型 | 是否必输 | 说明 |
| dateStr | str | 必输 | 必须是年月日格式,年要求四位,月日可以是长类型或者短类型,必须以'-'分隔符 |
var dateStr="2017-10-16";
var dateObj=parseDate(dateStr);
源代码
function parseDate(dateStr){
var ds = dateStr.split("-");
var y = parseInt(ds[0], 10);
var m = parseInt(ds[1], 10) - 1;
var d = parseInt(ds[2], 10);
return new Date(y, m, d);
}
对日期格式进行格式化 将2017-9-1格式的转换成2017-09-01格式
| 参数名称 | 参数类型 | 是否必输 | 说明 |
| dateStr | str | 必输 | 必须是年月日格式,年要求四位,月日可以是长类型或者短类型,必须以'-'分隔符 |
var dateStr="2017-2-1";
var dateObj=formatDate(dateStr);
源代码
function formatDate(dateStr){
var d = dateStr.split("-");
var month = parseInt(d[1], 10);
var date = parseInt(d[2], 10);
return d[0] + "-" + (month < 10 ? "0" + month : month) + "-" + (date < 10 ? "0" + date : date);
}
得到输入日期前几天或者后几天的日期。
| 参数名称 | 参数类型 | 是否必输 | 说明 |
| curDateStr | str | 必输 | 必须是年月日格式,年要求四位,月日可以是长类型或者短类型,必须以'-'或者'/'分隔符 |
| iPassNum | int | 必输 | 正、负数字 |
var curDate=new Date();
var backDate=curDate.dateAdd("2017-10-19",1);
var backDateStr=formatDate(backDate);
alert(backDateStr);//输出时间为2017-10-20
源代码
Date.prototype.dateAdd=function(curDateStr,iPassNum)
{
var dateObj;
var sNewDate=curDateStr;
var y,m,d;
var sDate;
var bUpChange=false;
var splitChar;
var szArry;
var strObj;
if(this.isDate(curDateStr,true)==false)
{
//alert("当前日期错误!");
return curDateStr;
}
strObj=new String(curDateStr);
splitChar=strObj.charAt(4);//年必须输入四位数字
szArry=strObj.split(splitChar);
y=parseInt(szArry[0],10);
m=parseInt(szArry[1],10);
d=parseInt(szArry[2],10);
while(iPassNum!=0)
{
//设置日期
if(iPassNum>0) d++;
else d--;
if(d<=0 || d>31)
{
bUpChange=true;
if(d<=0) d=31;
else d=1;
}
else
{
bUpChange=false;
}
//设置月
if(bUpChange)
{
if(iPassNum>0) m++;
else m--;
if(m<=0 || m>12)
{
bUpChange=true;
if(m<=0) m=12;
else m=1;
}
else
{
bUpChange=false;
}
}
//设置年
if(bUpChange)
{
if(iPassNum>0) y++;
else y--;
}
sNewDate=y+"-"+m+"-"+d;
if(this.isDate(sNewDate,false))
{
if(iPassNum>0) iPassNum--;
else iPassNum++;
}
}
return sNewDate;
}
得到输入日期所在的星期的开始日期(星期天)。
| 参数名称 | 参数类型 | 是否必输 | 说明 |
| curDateStr | str | 必输 | 必须是年月日格式,年要求四位,月日可以是长类型或者短类型,必须以'-'或者'/'分隔符 |
var curDate=new Date();
var backDate=curDate.getWeekStart("2017-10-19");
var backDateStr=formatDate(backDate);
alert(backDateStr);
源代码
//功能:得到输入日期所在的星期的开始日期(星期日)
Date.prototype.getWeekStart=function(dateStr)
{
this.isDate(dateStr,true);
var iWeek=this.getDay();
//一周的第一天这里定为周日
var iPassNum=iWeek;
if(iPassNum!=0) iPassNum=-iPassNum;
return formatDate(this.dateAdd(dateStr,iPassNum));
}
得到输入日期所在的星期的结束日期(星期六)。
| 参数名称 | 参数类型 | 是否必输 | 说明 |
| curDateStr | str | 必输 | 必须是年月日格式,年要求四位,月日可以是长类型或者短类型,必须以'-'或者'/'分隔符 |
var curDate=new Date();
var backDate=curDate.getWeekEnd("2017-10-19");
var backDateStr=formatDate(backDate);
alert(backDateStr);
源代码
//功能:得到输入日期所在的星期的结束日期(星期六)
Date.prototype.getWeekEnd=function(dateStr)
{
this.isDate(dateStr,true);
var iWeek=this.getDay();
//一周的第一天这里定为周日
var iPassNum=iWeek;
if(iPassNum!=0) iPassNum=-iPassNum;
return formatDate(this.dateAdd(dateStr,iPassNum));
}
得到输入日期所在的月份的开始日期。
| 参数名称 | 参数类型 | 是否必输 | 说明 |
| curDateStr | str | 必输 | 必须是年月日格式,年要求四位,月日可以是长类型或者短类型,必须以'-'或者'/'分隔符 |
var curDate=new Date();
var backDate=curDate.getMonthStart("2017-10-19");
var backDateStr=formatDate(backDate);
alert(backDateStr);//输出时间为2017-10-1
源代码
//功能:得到输入日期所在的月份的开始日期
Date.prototype.getMonthStart=function(dateStr)
{
this.isDate(dateStr,true);
dateStr=this.getFullYear()+"-"+(this.getMonth()+1)+"-1";
return formatDate(dateStr);
}
得到输入日期所在的月份的结束日期。
| 参数名称 | 参数类型 | 是否必输 | 说明 |
| curDateStr | str | 必输 | 必须是年月日格式,年要求四位,月日可以是长类型或者短类型,必须以'-'或者'/'分隔符 |
var curDate=new Date();
var backDate=curDate.getMonthStart("2017-10-19");
var backDateStr=formatDate(backDate);
alert(backDateStr);//输出时间为2017-10-31
源代码
//功能:得到输入日期所在的月份的结束日期
Date.prototype.getMonthEnd=function(dateStr)
{
this.isDate(dateStr,true);
var months=[31,28,31,30,31,30,31,31,30,31,30,31];
//this.isDate(dateStr,true);
var iYear=this.getFullYear();
var iMonth=this.getMonth()+1;
var iDay=months[this.getMonth()];
if(iYear%4==0 && iMonth==2){
iDay++;
}
dateStr=iYear+"-"+iMonth+"-"+iDay;
return formatDate(dateStr);
}
得到输入日期所在的季度的开始日期。
| 参数名称 | 参数类型 | 是否必输 | 说明 |
| curDateStr | str | 必输 | 必须是年月日格式,年要求四位,月日可以是长类型或者短类型,必须以'-'或者'/'分隔符 |
var curDate=new Date();
var backDate=curDate.getSeasonStart("2017-10-19");
var backDateStr=formatDate(backDate);
alert(backDateStr);
源代码
//功能:得到输入日期所在的季度的开始日期和结束日期
Date.prototype.getSeasonStart=function(dateStr)
{
var a=[1,1,1,4,4,4,7,7,7,10,10,10];
this.isDate(dateStr,true);
dateStr=this.getFullYear()+"-"+a[this.getMonth()]+"-1";
return formatDate(dateStr);
}
得到输入日期所在的季度的结束日期。
| 参数名称 | 参数类型 | 是否必输 | 说明 |
| curDateStr | str | 必输 | 必须是年月日格式,年要求四位,月日可以是长类型或者短类型,必须以'-'或者'/'分隔符 |
var curDate=new Date();
var backDate=curDate.getSeasonEnd("2017-10-19");
var backDateStr=formatDate(backDate);
alert(backDateStr);
源代码
//功能:得到输入日期所在的季度的开始日期和结束日期
Date.prototype.getSeasonEnd=function(dateStr)
{
this.isDate(dateStr,true);
var a=[3,3,3,6,6,6,9,9,9,12,12,12];
var m=[31,31,31,30,30,30,30,30,30,31,31,31];
this.isDate(dateStr,true);
dateStr=this.getFullYear()+"-"+a[this.getMonth()]+"-"+m[this.getMonth()];
return formatDate(dateStr);
}
得到这个月的第几周。
var curDate=new Date();
var weekNum=curDate.getWeekOfMonth();
alert(weekNum);
源代码
//得到这个月的第几周
Date.prototype.getWeekOfMonth = function(){
var w = this.getDay();
var d = this.getDate();
return Math.ceil((d + 6 - w)/7 );
}
日期格式化。
var curDate=new Date();
var dateStr=curDate.pattern('yyyy-MM-dd');
alert(dateStr);
源代码
Date.prototype.format = function(pattern) {
var hour = this.getHours();
var o = {
"M+" : this.getMonth() + 1, //month
"d+" : this.getDate(), //day
"H+" : hour, //hour
"h+" : (hour > 12 ? hour - 12 : hour), //hour
"m+" : this.getMinutes(), //minute
"s+" : this.getSeconds(), //second
"q+" : Math.floor((this.getMonth()+3)/3), //quarter
"S" : this.getMilliseconds() //millisecond
}
if(/(y+)/.test(pattern)){
pattern = pattern.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
}
for(var k in o)if(new RegExp("("+ k +")").test(pattern)){
pattern = pattern.replace(RegExp.$1, RegExp.$1.length==1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
}
return pattern;
}
数组中查找相应元素的位置。
var arry=[1,2,3,4,5];
var ind=arry.indexOf(3);
//输出ind 为 2
源代码
Array.prototype.indexOf = function(object){
for(var i = 0; i < this.length; i++) {
if(this[i] == object){
return i;
}
}
return -1;
}
可以理解为目标数据去继承某个数组,其实就是将参数数组的值都放到目标数组中。
var arry=[1,2,3,4,5];
var arry2=arry.extend([5,6,7,8,9]);
源代码
Array.prototype.extend = function(C){
for (var B = 0, A = C.length; B < A; B++) {
this.push(C[B]);
}
return this;
}
判断数组中是否包含指定元素。
var arry=[1,2,3,4,5];
var back=arry.contains(2);
源代码
Array.prototype.contains = function(object){
for(var i = 0; i < this.length; i++) {
if(this[i] == object){
return true;
}
}
return false;
}
获取当前字符串占用的字节长度。
var arry="中文";
var back=arry.getBytesLength();//输出是4 汉字是占用2个字节
源代码
String.prototype.getBytesLength = function() {
var cArr = this.match(/[^\x00-\xff]/ig);
return this.length + (cArr == null ? 0 : cArr.length);
};
根据指定的长度来获取字符串,如果字符串比指定长则截取并在后面追加相应的指定字符,如果字符串长度小于指定长度则直接返回。注意这里是根据字节长度来计算的
| 参数名称 | 参数类型 | 是否必输 | 说明 |
| maxlengh | int | 必输 | 指定的长度 |
| symbol | str | 非必输,默认值.. | 如果输入了symbol则字符串超长时拼接该字符串,如果没有输入symbol则用..来代替 |
var str="这是个比较长的字符串。";
var back=str.getLimitLength(str,3);//这...
源代码
String.prototype.getLimitLength = function(maxlengh, symbol) {
if(!maxlengh || maxlengh < 0){
return this;
}
var len = this.getBytesLength();
if(len <= maxlengh){
return this;
}
symbol = symbol == null ? ".." : symbol;
maxlengh = maxlengh - symbol.length;
var a = 0;
var temp = '';
for (var i = 0; i < this.length; i++) {
if (this.charCodeAt(i) > 255) a += 2;
else
a++;
temp += this.charAt(i);
if(a >= maxlengh) {
return temp + symbol;
}
}
return this;
};
对许多html标签字符串进行转义
| 参数名称 | 参数类型 | 是否必输 | 说明 |
| isEscapeSpace | int | 非必输 默认值false | 如果为true则转义的同时 过滤掉相应的空格 |
| isEscapeBr | str | 非必输, 默认值false | 如果为true则转义的同时 过滤掉相应的换行\n |
var str=" 。";
var arry2=str.escapeHTML();
alert(arry2)
源代码
String.prototype.getLimitLength = function(maxlengh, symbol) {
if(!maxlengh || maxlengh < 0){
return this;
}
var len = this.getBytesLength();
if(len <= maxlengh){
return this;
}
symbol = symbol == null ? ".." : symbol;
maxlengh = maxlengh - symbol.length;
var a = 0;
var temp = '';
for (var i = 0; i < this.length; i++) {
if (this.charCodeAt(i) > 255) a += 2;
else
a++;
temp += this.charAt(i);
if(a >= maxlengh) {
return temp + symbol;
}
}
return this;
};
判断字符串是否由指定字符串开头。
var arry="中文";
var back=arry.startsWith("中");//输出是true
源代码
String.prototype.startsWith = function(prefix){
return this.indexOf(prefix) == 0;
};
判断字符串是否由指定字符串结尾。
var arry="中文";
var back=arry.endsWith("文");//输出是true
源代码
String.prototype.endsWith = function(subfix){
var pos = this.indexOf(subfix);
return pos > -1 && pos == this.length - subfix.length;
};
将字符串中的空格用 来代替。
var str=" 中文 ";
var back=str.escapeSpace();
源代码
String.prototype.escapeSpace = function(){
return this.replace(/ /g, " ");
};
将字符串中的空格用  来代替。
var str=" 中文 ";
var back=str.escapeSameWidthSpace();
源代码
String.prototype.escapeSameWidthSpace = function(){
return this.replace(/ /g, " ");
};
替换字符串中的单引号和双引号。
var str=" '中文' ";
var back=str.escapeQuot();
源代码
String.prototype.escapeQuot = function(){
return this.replace(/\'/g,"'").replace(/"/g,""");
};
去掉字符串前后的空格。
var str=" '中文' ";
var back=str.trim();
源代码
/**
* 去掉空格
*/
String.prototype.trim = function(){
var chs = this.toCharArray();
var st = 0;
var off = chs.length;
for(var i = 0; i < chs.length; i++){
var c = chs[i];
if(c == ' '){
st++;
}
else{
break;
}
}
if(st == this.length){
return "";
}
for(var i = chs.length; i > 0; i--){
var c = chs[i-1];
if(c == ' '){
off--;
}
else{
break;
}
}
return this.substring(st, off);
};
格式化url字符串,会替换其中的换行符并将特殊字符进行转义。
var str=" '中文' ";
var back=str.trim();
源代码
String.prototype.escapeUrl = function(isEscapeSpace){
try {
return escapeStringToHTML(this.replace(/\n/g, ''), isEscapeSpace);
}
catch (e) {
}
return this;
};
将字符串转成数组。
var str="中文";
var back=str.toCharArray();
源代码
/**
* 将字符串转成数组
*/
String.prototype.toCharArray = function(){
var array = [];
for(var i = 0; i < this.length; i++){
array[i] = this.charAt(i);
}
return array;
};
返回arrayList对象元素的数量。
var newAry=new ArrayList();
newAry.add("123");
alert(newAry.size());
源代码
ArrayList.prototype.size = function(){
return this.instance.length;
}
向arrayList对象中添加元素。
var newAry=new ArrayList();
newAry.add("123");
alert(newAry.size());
源代码
/**
* 在末尾追加一个
*/
ArrayList.prototype.add = function(o){
this.instance[this.instance.length] = o;
}
向arrayList对象中添加元素,如果该元素已经存在则添加不进去。
var newAry=new ArrayList();
newAry.addSingle("123"); newAry.addSingle("123");
alert(newAry.size());//这里长度还是1,因为第二次添加将被忽略
源代码
/**
* 当list中不存在该对象时才添加
*/
ArrayList.prototype.addSingle = function(o){
if(!this.contains(o)){
this.instance[this.instance.length] = o;
}
}
在指定位置增加元素。
var newAry=new ArrayList();
newAry.addSingle("123");
newAry.addAt(1,"1234");
源代码
/**
* 在指定位置增加元素
* @param posation 位置, 从0开始
* @param o 要增加的元素
*/
ArrayList.prototype.addAt = function(position, o){
if(position >= this.size() || position < 0 || this.isEmpty()){
this.add(o);
return;
}
this.instance.splice(position, 0, o);
}
传入一个数组,将数组的所有元素加入到ArrayList对象中。
var newAry=new ArrayList();
newAry.addAll(['a','b','c']);
源代码
ArrayList.prototype.addAll = function(array){
if(!array || array.length < 1){
return;
}
this.instance = this.instance.concat(array);
}
传入一个ArrayList,将ArrayList的所有元素加入到目标ArrayList对象中。
var newAry=new ArrayList();
newAry.addAll(['a','b','c']);
var newAryTwo=new ArrayList();
newAryTwo.addList(newAry);
源代码
/**
* 追加一个List在队尾
*/
ArrayList.prototype.addList = function(list){
if(list && list instanceof ArrayList && !list.isEmpty()){
this.instance = this.instance.concat(list.instance);
}
}
根据指定的位置获取对应的对象。
var newAry=new ArrayList();
newAry.addAll(['a','b','c']);
newAry.get(1);
源代码
ArrayList.prototype.get = function(index){
if(this.isEmpty()){
return null;
}
if(index > this.size()){
return null;
}
return this.instance[index];
}
获取最后一个元素。
var newAry=new ArrayList();
newAry.addAll(['a','b','c']);
newAry.getLast();
源代码
/**
* 最后一个
*/
ArrayList.prototype.getLast = function(){
if(this.size() < 1){
return null;
}
return this.instance[this.size() - 1];
}
在指定位置插入相应的值,注意传入的index是已经存在元素的位置,也就是要通过add添加了元素的,可以理解set是进行元素修改操作的
var newAry=new ArrayList();
newAry.add(2);
newAry.set(2,'123');
newAry.getLast();
源代码
ArrayList.prototype.set = function(index, obj){
if(index >= this.size()){
throw "IndexOutOfBoundException : Index " + index + ", Size "+this.size();
}
var oldValue = this.instance[index];
this.instance[index] = obj;
return oldValue;
}
根据指定位置删除相应的元素
var newAry=new ArrayList();
newAry.add('123');
newAry.removeElementAt(0);
alert(newAry.size());
源代码
ArrayList.prototype.set = function(index, obj){
if(index >= this.size()){
throw "IndexOutOfBoundException : Index " + index + ", Size "+this.size();
}
var oldValue = this.instance[index];
this.instance[index] = obj;
return oldValue;
}
根据元素对象删除相应的元素
var newAry=new ArrayList();
newAry.add('123');
newAry.remove('123');
alert(newAry.size());
源代码
/**
* Removes the element in this list.
*/
ArrayList.prototype.remove = function(o){
var index = this.indexOf(o);
this.removeElementAt(index);
}
判断ArrayList中是否包含该元素对象,如果存放的元素是对象,可以指定其中的某个属性来判断是否存在
var newAry=new ArrayList();
newAry.add('123');
alert(newAry.contains('123'));
newAry.add({userId:'test',name:'zhangsan'});
alert(newAry.contains({userId:'test',name:'zhangsan'},'userId'));
源代码
ArrayList.prototype.contains = function(o, comparatorProperies){
return this.indexOf(o, comparatorProperies) > -1;
}
获取指定元素在arryList对象里的具体位置,如果存放的元素是对象,可以指定其中的某个属性来判断,从前往后找
var newAry=new ArrayList();
newAry.add('123');
alert(newAry.indexOf('123'));
newAry.add({userId:'test',name:'zhangsan'});
alert(newAry.indexOf({userId:'test',name:'zhangsan'},'userId'));
源代码
ArrayList.prototype.indexOf = function(o, comparatorProperies){
for(var i = 0; i < this.size(); i++){
var s = this.instance[i];
if(s == o){
return i;
}
else if(comparatorProperies != null && s != null && o != null && s[comparatorProperies] == o[comparatorProperies]){
return i;
}
}
return -1;
}
获取指定元素在arryList对象里的具体位置,如果存放的元素是对象,可以指定其中的某个属性来判断,从后往前找
var newAry=new ArrayList();
newAry.add('123');
alert(newAry.lastIndexOf('123'));
newAry.add({userId:'test',name:'zhangsan'});
alert(newAry.lastIndexOf({userId:'test',name:'zhangsan'},'userId'));
源代码
ArrayList.prototype.lastIndexOf = function(o, comparatorProperies){
for(var i = this.size() - 1; i >= 0; i--){
var s = this.instance[i];
if(s == o){
return i;
}
else if(comparatorProperies != null && s != null && o != null && s[comparatorProperies] == o[comparatorProperies]){
return i;
}
}
return -1;
}
根据指定的起始位置,和结束位置,截取list中的部分返回
var newAry=new ArrayList();
newAry.addAll([1,2,3,4,5]);
var subList=newAry.subList(0,2);
源代码
ArrayList.prototype.subList = function(fromIndex, toIndex){
if(fromIndex < 0){
fromIndex = 0;
}
if(toIndex > this.size()){
toIndex = this.size();
}
var tempArray = this.instance.slice(fromIndex, toIndex);
var temp = new ArrayList();
temp.addAll(tempArray);
return temp;
}
将ArrayList转换成数组Array
var newAry=new ArrayList();
newAry.addAll([1,2,3,4,5]);
var subList=newAry.toArray();
源代码
ArrayList.prototype.toArray = function(){
return this.instance;
}
判断当前ArrayList是否为空
var newAry=new ArrayList();
newAry.addAll([1,2,3,4,5]);
newAry.isEmpty();
源代码
ArrayList.prototype.isEmpty = function(){
return this.size() == 0;
}
清空ArrayList对象
var newAry=new ArrayList();
newAry.addAll([1,2,3,4,5]);
newAry.clear();
源代码
ArrayList.prototype.clear = function(){
this.instance = new Array();
}
将ArrayList对象中的值根据指定连接符连接成字符串返回
var newAry=new ArrayList();
newAry.addAll([1,2,3,4,5]);
newAry.toString(";");
源代码
ArrayList.prototype.toString = function(sep){
sep = sep || ", ";
return this.instance.join(sep);
}
想StringBuffer对象中拼接字符串
var buffer=new StringBuffer();
buffer.append("test1");newAry.append("test2");
buffer.toString();
源代码
StringBuffer.prototype.append = function(str){
if(str){
if(str instanceof Array){
this._strings_ = this._strings_.concat(str);
}
else{
this._strings_[this._strings_.length] = str;
}
}
return this;
}
将StringBuffer对象置空,并将新传入的字符串赋值给该对象
var buffer=new StringBuffer();
buffer.append("test1");newAry.append("test2");
buffer.reset("test3");
源代码
StringBuffer.prototype.reset = function(newStr){
this.clear();
this.append(newStr);
}
将StringBuffer对象置空
var buffer=new StringBuffer();
buffer.append("test1");newAry.append("test2");
buffer.clear();
源代码
StringBuffer.prototype.clear = function(){
this._strings_ = new Array();
}
判断StringBuffer对象是否为空
var buffer=new StringBuffer();
buffer.append("test1");newAry.append("test2");
buffer.isBlank();//false
源代码
StringBuffer.prototype.isBlank = function(){
return this._strings_.length == 0;
}
将StringBuffer对象中的值根据指定连接符,连接成字符串返回
var buffer=new StringBuffer();
buffer.append("test1");newAry.append("test2");
buffer.toString();
源代码
StringBuffer.prototype.toString = function(sp){
sp = sp == null ? "" : sp;
if (this._strings_.length == 0)
return "";
return this._strings_.join(sp);
}
想set对象中插入值,可以单个插入也可以多个插入
var set=new Set();
set.add("test1");newAry.add("test2");
set.add(5, 6, 7, 8, 9);
set.toString();
源代码
Set.prototype.add = function(){
if(arguments == null || arguments.length < 1){
throw "arguments is null";
}
for(var i = 0; i < arguments.length; i++) {
var a = arguments[i];
if(!this.contains(a)){ //存在
this.instance[this.size()] = a;
this.key[a] = "A8"; //随便给个值
}
}
}
获取set对象中元素的个数
var set=new Set();
set.add("test1");newAry.add("test2");
set.add(5, 6, 7, 8, 9);
set.size();
源代码
Set.prototype.size = function(){
return this.instance.length;
}
判断set对象是否存在指定元素
var set=new Set();
set.add("test1");newAry.add("test2");
set.add(5, 6, 7, 8, 9);
set.contains(5);
源代码
Set.prototype.contains = function(o){
return this.key[o] != null;
}
判断set对象是否为空,如果为空则返回true,否则返回false
var set=new Set();
set.add("test1");newAry.add("test2");
set.add(5, 6, 7, 8, 9);
set.isEmpty();
源代码
Set.prototype.isEmpty = function(){
return this.size() == 0;
}
将当前set对象清空
var set=new Set();
set.add("test1");newAry.add("test2");
set.add(5, 6, 7, 8, 9);
set.clear();
源代码
Set.prototype.clear = function(){
this.instance = new Array();
this.key = {
}
}
根据当前元素的序号获取其值
var set=new Set();
set.add("test1");newAry.add("test2");
set.add(5, 6, 7, 8, 9);
set.get(0);
源代码
Set.prototype.get = function(index){
if(this.isEmpty()){
return null;
}
if(index > this.size()){
return null;
}
return this.instance[index];
}
将set对象转换成一个数组返回
var set=new Set();
set.add("test1");newAry.add("test2");
set.add(5, 6, 7, 8, 9);
set.toArray();
源代码
Set.prototype.toArray = function(){
return this.instance;
}
将Set对象中的值根据指定连接符,连接成字符串返回,如果没有指定连接符则默认为逗号
var set=new Set();
set.add("test1");newAry.add("test2");
set.toString();
源代码
Set.prototype.toString = function(){
return this.instance.join(', ');
}
将Properties对象中的值,根据key=value的方式拼接起来组成字符串进行返回
var prop=new Properties();
prop.put("name","value");
prop.toString();
源代码
Properties.prototype.toString = function(){
var str = "";
for(var i=0; i
将Properties对象中的值,根据key=value的方式拼接起来组成字符串进行返回,元素之间默认通过分号连接。 可以用户自定义,元素之间的指定符通过token1来指定,默认是分号 key与value之间通过token2来指定默认是等号
var prop=new Properties();
prop.put("name","value");
prop.toStringTokenizer();
源代码
Properties.prototype.toStringTokenizer = function(token1, token2){
token1 = token1 == null ? ";" : token1;
token2 = token2 == null ? "=" : token2;
var str = "";
for(var i=0; i 0){
str += token1;
}
str += key + token2 + value;
}
return str;
}
将Properties对象中的值,根据key=value的方式拼接起来组成字符串进行返回,元素直接通过&进行拼接
var prop=new Properties();
prop.put("name","value");
prop.toStringTokenizer();
源代码
Properties.prototype.toQueryString = function(){
if(this.size() < 1){
return "";
}
var str = "";
for(var i=0; i 0){
str += "&";
}
if(typeof value == "object"){
}
else{
str += key + "=" + encodeURIat(value);
}
}
return str;
}
获取properties对象元素的个数
var prop=new Properties();
prop.put("name","value");
prop.size();
源代码
Properties.prototype.size = function(){
return this.instanceKeys.size();
}
获取properties对象中元素对象根据传入的key,而且可以传入一个缺少值,如果获取到元素对象的值为空则将缺少值赋值给该元素
var prop=new Properties();
prop.put("name",null);
prop.get("name","张三");
源代码
Properties.prototype.get = function(key, defaultValue){
if(key == null){
return null;
}
var returnValue = this.instance[key];
if(returnValue == null && defaultValue != null){
return defaultValue;
}
return returnValue;
}
根据指定的key来删除相应的元素
var prop=new Properties();
prop.put("name",null);
prop.remove("name");
源代码
Properties.prototype.remove = function(key){
if(key == null){
return null;
}
this.instanceKeys.remove(key);
delete this.instance[key]
}
向Properties对象中添加元素,但如果对象中存在了key相同的元素则添加不进去
var prop=new Properties();
prop.put("name",null);
prop.put("name","123");//其实这里是添加失败的,因为name这个元素已经添加过。
源代码
Properties.prototype.put = function(key,value){
if(key == null){
return null;
}
if(this.instance[key] == null){
this.instanceKeys.add(key);
}
this.instance[key] = value;
}
向Properties对象中添加元素,如果对象中存在了key相同的元素也可以添加进来
var prop=new Properties();
prop.put("name",null);
prop.put("name","123");
源代码
Properties.prototype.putRef = function(key,value){
if(key == null){
return null;
}
this.instanceKeys.add(key);
this.instance[key] = value;
}
跨层级来获取其值,当元素的value还是一个properties时就可以跨层级获取其中的值, 比如:userinfo.getMultilevel("department.name"); 等价于userinfo.get("department").get("name")
var userinfo=new Properties();
var department=new Properties();
department.put("name","前台开发");
userinfo.put("department",department);
userinfo.getMultilevel("department.name");
源代码
Properties.prototype.getMultilevel = function(key, defaultValue){
if(key == null){
return null;
}
var _keys = key.split(".");
function getObject(obj, keys, i){
try{
if(obj == null || (typeof obj != "object")){
return null;
}
var obj1 = obj.get(keys[i]);
if(i < keys.length - 1){
obj1 = getObject(obj1, keys, i + 1);
}
return obj1;
}
catch(e){
}
return null;
}
var returnValue = getObject(this, _keys, 0);
return returnValue == null ? defaultValue : returnValue;
}
判断Properties对象是否包含指定key
var prop=new Properties();
prop.put("name",null);
prop.containsKey("name");
源代码
Properties.prototype.containsKey = function(key){
if(key == null){
return false;
}
return this.instance[key] != null;
}
获取Properties对象的所有keys,返回的是ArrayList对象
var prop=new Properties();
prop.put("name",null);
prop.keys();
源代码
Properties.prototype.keys = function(){
return this.instanceKeys;
}
获取Properties对象的所有values,返回的是ArrayList对象
var prop=new Properties();
prop.put("name",null);
prop.values();
源代码
Properties.prototype.values = function(){
var vs = new ArrayList();
for(var i=0; i
判断Properties对象是否为空
var prop=new Properties();
prop.put("name",null);
prop.isEmpty();
源代码
Properties.prototype.isEmpty = function(){
return this.instanceKeys.isEmpty();
}
清空Properties对象
var prop=new Properties();
prop.put("name",null);
prop.clear();
源代码
Properties.prototype.clear = function(){
this.instanceKeys.clear();
this.instance = {};
}
根据指定key1,key2的值交换2个元素的位置
var prop=new Properties();
prop.put("name","test");
prop.put("age",18);
prop.swap("name","age");
alert(prop.keys().toString());//输出是age,name
源代码
Properties.prototype.swap = function(key1, key2){
if(!key1 || !key2 || key1 == key2){
return;
}
var index1 = -1;
var index2 = -1;
for(var i = 0; i < this.instanceKeys.instance.length; i++) {
if(this.instanceKeys.instance[i] == key1){
index1 = i;
}
else if(this.instanceKeys.instance[i] == key2){
index2 = i;
}
}
this.instanceKeys.instance[index1] = key2;
this.instanceKeys.instance[index2] = key1;
}
根据Properties中元素,组装成[{key:'',value:''}]的方式返回
var prop=new Properties();
prop.put("name","test");
prop.put("age",18);
prop.entrySet();
源代码
Properties.prototype.entrySet = function(){
var result = [];
for(var i=0; i
弹出窗口
var win = v3x.openDialog({
id:"documentIpad",
title:v3x.getMessage("collaborationLang.collaboration_alertQuoteItem"),
url : _ctxPath +"/ctp/common/associateddoc/assdocFrame.do",
width: 650,
height: 500,
//isDrag:false,
//targetWindow:getA8Top(),
//fromWindow:window,
type:'window',
//relativeElement:obj,
buttons:[{
id:'btn12',
text: v3x.getMessage("collaborationLang.submit"),
handler: function(){
win.close();
}
}, {
id:'btn21',
text: v3x.getMessage("collaborationLang.cancel"),
handler: function(){
win.close();
}
}]
});
源代码
V3X.prototype.openDialog = function(json) {
return new MxtWindow(json);
}
弹出新界面窗口
| 参数名称 | 参数类型 | 是否必输 | 说明 |
| html | boolean | 可选 | html为true时调用window.open,如果不为true则判断dialogType参数是否为modal,而且是ie浏览器则会通过showModalDialog来弹出窗口 |
| FullScrean | boolean | 可选 | true表示全屏 |
| workSpace | boolean | 可选 | true表示弹出的窗口与工作区workSpace大小一致 |
| workSpaceRight | boolean | 可选 | 弹出窗口是去掉了右边菜单区域 |
| width | int | 可选 | 默认值320 |
| height | int | 可选 | 默认值200 |
| resizable | yes or no | 可选 | 表示窗口是否可以改变大小,默认yes |
| scrollbars | yes or no | 可选 | 表示窗口是否可以有滚动条,默认yes |
| dialogType | str | 可选 | 默认值是modal, dialogType参数为modal,而且是ie浏览器则会通过showModalDialog来弹出窗口,如果不是ie浏览器则通过window.open来打开 |
var rv = v3x.openWindow({
url: contextPath + "/common/js/addDate/date.jsp?type=" + type + "&allowEmpty=" + allowEmpty + "&showButton=true",
height: 230,
width: 250,
'top': evt.screenY + 20,
left: evt.screenX - 50
});
关闭窗口
var rv = v3x.openWindow({
url: "/common/js/addDate/date.jsp?type=" + 2 + "&allowEmpty=" + 3 + "&showButton=true",
height: 230,
width: 250,
dialogType:'modal',
workSpace: 'yes',
'top': 20,
left: 50
});
v3x.closeWindow(rv);
源代码
V3X.prototype.closeWindow = function(win) {
win.close();
}
得到弹出当前窗口的直接父窗口
var rv = v3x.openWindow({
url: "/common/js/addDate/date.jsp?type=" + 2 + "&allowEmpty=" + 3 + "&showButton=true",
height: 230,
width: 250,
dialogType:'modal',
workSpace: 'yes',
'top': 20,
left: 50
});
var prv=v3x.getParentWindow(rv);
alert(prv.grid)
源代码
V3X.prototype.getParentWindow = function(win){
win = win || window;
if(win.dialogArguments){
return win.dialogArguments;
}
else{
return win.opener || win;
}
}
JS的国际化
v3x.getMessage("collaborationLang.submit")
源代码
V3X.prototype.getMessage = function(key){
try{
var msg = eval("" + key);
if(msg && arguments.length > 1){
for(var i = 0; i < arguments.length - 1; i++) {
var regEx = eval("messageRegEx_" + i);
var repMe = "" + arguments[i + 1];
if(repMe.indexOf("$_") != -1){
repMe = repMe.replace("$_", "$$_");
}
msg = msg.replace(regEx, repMe);
}
}
return msg;
}
catch(e){
}
return "";
}
通过js脚本异步加载js文件
v3x.loadScriptFile(this.baseURL + url + "/" + this.currentLanguage + ".js?V=3_50_2_29");
源代码
V3X.prototype.loadScriptFile = function(url) {
for (var i=0; i');
this.loadedFiles[this.loadedFiles.length] = url;
};
获取当前指定元素的横、纵向坐标位置
var el=document.getElementById("test");
v3x.getElementPosition(el);
源代码
V3X.prototype.getElementPosition = function(el){
var ua = navigator.userAgent.toLowerCase();
var isOpera = (ua.indexOf('opera') != -1);
var isIE = (ua.indexOf('msie') != -1 && !isOpera);
// not opera spoof
if(el.parentNode === null || el.style.display == 'none'){
return false;
}
var parent = null;
var pos = [];
var box;
if(el.getBoundingClientRect){//IE
box = el.getBoundingClientRect();
var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
var scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
return {x:box.left + scrollLeft, y:box.top + scrollTop};
}else if(document.getBoxObjectFor){ // gecko
box = document.getBoxObjectFor(el);
var borderLeft = (el.style.borderLeftWidth)?parseInt(el.style.borderLeftWidth):0;
var borderTop = (el.style.borderTopWidth)?parseInt(el.style.borderTopWidth):0;
pos = [box.x - borderLeft, box.y - borderTop];
}else{// safari & opera
pos = [el.offsetLeft, el.offsetTop];
parent = el.offsetParent;
if (parent != el) {
while (parent) {
pos[0] += parent.offsetLeft;
pos[1] += parent.offsetTop;
parent = parent.offsetParent;
}
}
if (ua.indexOf('opera') != -1|| ( ua.indexOf('safari') != -1 && el.style.position == 'absolute')){
pos[0] -= document.body.offsetLeft;
pos[1] -= document.body.offsetTop;
}
}
if (el.parentNode){
parent = el.parentNode;
}else{
parent = null;
}
while (parent && parent.tagName != 'BODY' && parent.tagName != 'HTML'){ // account for any scrolled ancestors
pos[0] -= parent.scrollLeft; pos[1] -= parent.scrollTop;
if (parent.parentNode) {
parent = parent.parentNode;
}else {
parent = null;
}
}
return {x:pos[0], y:pos[1]};
}
使按钮可以操作
var el=document.getElementById("test");
v3x.getElementPosition(el);
源代码
function enableButton(button){
if(!button){
return false;
}
var el = null;
if(typeof button == "string"){
el = document.getElementById(button);
}
else{
el = button;
}
if(!el){
return false;
}
var cDisabled=el.cDisabled;
cDisabled=(cDisabled!=null);
if(cDisabled){
el.cDisabled=null;
el.innerHTML=el.children[0].children[0].innerHTML;
if(el.cDisabled_onclick!=null){
el.onclick=el.cDisabled_onclick;
el.cDisabled_onclick=null;
}
if(el.cDisabled_onmouseover!=null){
el.onmouseover=el.cDisabled_onmouseover;
el.cDisabled_onmouseover=null;
}
if(el.cDisabled_onmouseout!=null){
el.onmouseout=el.cDisabled_onmouseout;
el.cDisabled_onmouseout=null;
}
}
}
使按钮变得不可以操作
var el=document.getElementById("test");
v3x.getElementPosition(el);
源代码
function disableButton(button, height){
height = height || "100%";
if(!button){
return false;
}
var el = null;
if(typeof button == "string"){
el = document.getElementById(button);
}
else{
el = button;
}
if(!el){
return false;
}
if(document.readyState != "complete") {
if(typeof button == "string"){
window.setTimeout("disableButton('"+button+"')", 2500);
}else{
window.setTimeout("disableButton("+button+")", 2500);
}
return;
}
var cDisabled = el.cDisabled;
cDisabled=(cDisabled!=null);
if(!cDisabled){
el.cDisabled = true;
if(document.getElementsByTagName){
var str = "";
str += " ";
str += el.innerHTML
str += " ";
str += "";
el.innerHTML = str;
}
else{
el.innerHTML=''+''+el.innerHTML+''+'';
}
if(el.onclick!=null){
el.cDisabled_onclick = el.onclick;
el.onclick = null;
}
if(el.onmouseover!=null){
el.cDisabled_onmouseover = el.onmouseover;
el.onmouseover = null;
}
if(el.onmouseout!=null){
el.cDisabled_onmouseout = el.onmouseout;
el.onmouseout = null;
}
}
}
发送ajax时,添加相应的参数
var requestCaller = new XMLHttpRequestCaller(this, "ajaxOrgManager", "canShowPeopleCard", false);
requestCaller.addParameter(1, "Long", null);
requestCaller.addParameter(2, "Long", memberId);
var rs = requestCaller.serviceRequest();
发出请求
var requestCaller = new XMLHttpRequestCaller(this, "ajaxOrgManager", "canShowPeopleCard", false);
requestCaller.addParameter(1, "Long", null);
requestCaller.addParameter(2, "Long", memberId);
var rs = requestCaller.serviceRequest();
定义ajax请求对象
| 参数名称 | 参数类型 | 是否必输 | 说明 |
| _caller | object | 可选 | 组件对象,如果不是组件对象可以设置成null |
| serviceName | str | 可选 | 服务名称,注意虽然该参数是可选,但不能serviceName,methodName,actionUrl三个同时为空 |
| methodName | str | 可选 | 方法名称,注意虽然该参数是可选,但不能serviceName,methodName,actionUrl三个同时为空 |
| async | boolean | 可选 | 默认true 是异步查询,如果需要同步则设置为false |
| method | GET or POST | 可选 | 默认值POST |
| needCheckLogin | boolean | 可选 | 校验是否登录系统,默认是true |
| actionUrl | str | 可选 | 当没有设置serviceName、methodName的情况下,可以通过actionUrl来进行查询 |
var requestCaller = new XMLHttpRequestCaller(this, "ajaxOrgManager", "canShowPeopleCard", false);
requestCaller.addParameter(1, "Long", null);
requestCaller.addParameter(2, "Long", memberId);
var rs = requestCaller.serviceRequest();
刷新当前工作区
refreshWorkSpace();
刷新当前页面
refreshIt();
页面回退
locationBack();
从input中读取属性为defaultValue的值
var obj=document.getElementById("phone");
getDefaultValue(obj)
对标题默认值的切换;去掉为默认值,显示空白,用在onFocus
var obj=document.getElementById("phone");
checkDefSubject(obj,true)
检测checkbox是否被选择
validateCheckbox("phone")
显示编辑器
showEditor("HTML")
日期转成中文大写形式
var backStr=date2chinese('2017-01-19');
alert(backStr)//输出二零一七年一月十九日
数字转成中文数字格式
var backStr=num2chinese('2');
alert(backStr)//二
添加日期年月日中文
var backStr=date2chinese1('2017-01-19');
alert(backStr)//2017年1月19日
将日期转换成中文展示格式,但零用O来表示
var backStr=date2chinese0('2017-01-19');
alert(backStr)//二〇一七年一月十九日
| 方法名称 | 描述 |
| extendParam | 将para对象的属性复制到tpl对象中 但如果是数组属性则不进行复制 |
| attrObj | 缓存控件对象 |
| disableButton | 使按钮变得不可以操作 |
| enableButton | 使按钮可以操作 |
| refreshWorkSpace | 刷新当前工作区 |
| refreshIt | 刷新当前页面 |
| locationBack | 页面回退 |
| getDefaultValue | 从input中读取属性为defaultValue的值 |
| checkDefSubject | 对标题默认值的切换;去掉为默认值,显示空白,用在onFocus |
| validateCheckbox | 检测checkbox是否被选择 |
| showEditor | 显示编辑器 |
| date2chinese | 日期转成中文大写形式 |
| date2chinese1 | 添加日期年月日中文 |
| date2chinese0 | 将日期转换成中文展示格式,但零用O来表示 |
| 方法名称 | 描述 |
| isDate | 判断是否为合法的日期字符串 |
| parseDate | 将日期字符串转换成日期对象,但该方法并没有Date.parseDate方法强大,parseDate是简单封装和转换,而Date.parseDate是calendar-debug.js提供,该方法可以指定字符串的格式进行转换。 |
| formatDate | 对日期格式进行格式化 将2017-9-1格式的转换成2017-09-01格式 |
| dateAdd | 得到输入日期前几天或者后几天的日期。 |
| getWeekStart | 得到输入日期所在的星期的开始日期(星期天)。 |
| getWeekEnd | 得到输入日期所在的星期的结束日期(星期六)。 |
| getMonthStart | 得到输入日期所在的月份的开始日期。 |
| getMonthEnd | 得到输入日期所在的月份的结束日期 |
| getSeasonStart | 得到输入日期所在的季度的开始日期。 |
| getSeasonEnd | 得到输入日期所在的季度的结束日期。 |
| getWeekOfMonth | 得到这个月的第几周。 |
| format | 日期格式化 |
| 方法名称 | 描述 |
| indexOf | 数组中查找相应元素的位置。 |
| extend | 可以理解为目标数据去继承某个数组,其实就是将参数数组的值都放到目标数组中。 |
| contains | 判断数组中是否包含指定元素。 |
| 方法名称 | 描述 |
| size | 返回arrayList对象元素的数量。 |
| add | 向arrayList对象中添加元素。 |
| addSingle | 向arrayList对象中添加元素,如果该元素已经存在则添加不进去。 |
| addAt | 在指定位置增加元素。 |
| addAll | 传入一个数组,将数组的所有元素加入到ArrayList对象中。 |
| addList | 传入一个ArrayList,将ArrayList的所有元素加入到目标ArrayList对象中。 |
| get | 根据指定的位置获取对应的对象 |
| getLast | 获取最后一个元素。 |
| set | 在指定位置插入相应的值,注意传入的index是已经存在元素的位置,也就是要通过add添加了元素的,可以理解set是进行元素修改操作的。 |
| removeElementAt | 根据指定位置删除相应的元素。 |
| remove | 根据元素对象删除相应的元素。 |
| contains | 判断ArrayList中是否包含该元素对象,如果存放的元素是对象,可以指定其中的某个属性来判断是否存在。 |
| indexOf | 获取指定元素在arryList对象里的具体位置,如果存放的元素是对象,可以指定其中的某个属性来判断,从前往后找。 |
| lastIndexOf | 获取指定元素在arryList对象里的具体位置,如果存放的元素是对象,可以指定其中的某个属性来判断,从后往前找。 |
| subList | 根据指定的起始位置,和结束位置,截取list中的部分返回。 |
| toArray | 将ArrayList转换成数组Array。 |
| isEmpty | 判断当前ArrayList是否为空。 |
| clear | 清空ArrayList对象。 |
| toString | 将ArrayList对象中的值根据指定连接符连接成字符串返回。 |
| 方法名称 | 描述 |
| getBytesLength | 获取当前字符串占用的字节长度。。 |
| getLimitLength | 根据指定的长度来获取字符串,如果字符串比指定长则截取并在后面追加相应的指定字符,如果字符串长度小于指定长度则直接返回。注意这里是根据字节长度来计算的。 |
| escapeHTML | 对许多html标签字符串进行转义。 |
| escapeUrl | 格式化url字符串,会替换其中的换行符并将特殊字符进行转义。 |
| escapeSpace | 将字符串中的空格用 来代替。 |
| escapeSameWidthSpace | 将字符串中的空格用 俩个  来代替。。 |
| escapeQuot | 替换字符串中的单引号和双引号 |
| startsWith | 判断字符串是否由指定字符串开头。。 |
| endsWith | 判断字符串是否由指定字符串结尾。 |
| trim | 去掉字符串前后的空格。 |
| toCharArray | 将字符串转成数组。 |
| 方法名称 | 描述 |
| size | 获取properties对象元素的个数 |
| get | 获取properties对象中元素对象根据传入的key,而且可以传入一个缺少值,如果获取到元素对象的值为空则将缺少值赋值给该元素 |
| remove | 根据指定的key来删除相应的元素。 |
| put | 向Properties对象中添加元素,但如果对象中存在了key相同的元素则添加不进去。 |
| putRef | 向Properties对象中添加元素,如果对象中存在了key相同的元素也可以添加进来。 |
| getMultilevel | 跨层级来获取其值,当元素的value还是一个properties时就可以跨层级获取其中的值, 比如:userinfo.getMultilevel("department.name"); 等价于userinfo.get("department").get("name") |
| containsKey | 判断Properties对象是否包含指定key |
| keys | 获取Properties对象的所有keys,返回的是ArrayList对象 |
| values | 获取Properties对象的所有values,返回的是ArrayList对象。 |
| isEmpty | 判断Properties对象是否为空。 |
| clear | 清空Properties对象。 |
| swap | 根据指定key1,key2的值交换2个元素的位置。 |
| entrySet | 根据Properties中元素,组装成[{key:'',value:''}]的方式返回。 |
| toString | 将Properties对象中的值,根据key=value的方式拼接起来组成字符串进行返回。 |
| toStringTokenizer | 将Properties对象中的值,根据key=value的方式拼接起来组成字符串进行返回,元素之间默认通过分号连接。 可以用户自定义,元素之间的指定符通过token1来指定,默认是分号 key与value之间通过token2来指定默认是等号。 |
| toQueryString | 将Properties对象中的值,根据key=value的方式拼接起来组成字符串进行返回,元素直接通过&进行拼接。 |
| 方法名称 | 描述 |
| add | 想set对象中插入值,可以单个插入也可以多个插入 |
| size | 判断set对象中元素的个数 |
| contains | 判断set对象是否存在指定元素。 |
| isEmpty | 判断set对象是否为空,如果为空则返回true,否则返回false。 |
| clear | 将当前set对象清空。 |
| get | 根据当前元素的序号获取其值 |
| toArray | 将set对象转换成一个数组返回 |
| toString | 将Set对象中的值根据指定连接符,连接成字符串返回,如果没有指定连接符则默认为逗号 |
| 方法名称 | 描述 |
| append | 想StringBuffer对象中拼接字符串 |
| reset | 将StringBuffer对象置空,并将新传入的字符串赋值给该对象 |
| clear | 将StringBuffer对象置空。 |
| isEmpty | 判断set对象是否为空,如果为空则返回true,否则返回false。 |
| isBlank | 判断StringBuffer对象是否为空。 |
| toString | 将StringBuffer对象中的值根据指定连接符,连接成字符串返回 |
| 方法名称 | 描述 |
| openDialog | 弹出窗口 |
| openWindow | 弹出新界面窗口 |
| closeWindow | 关闭窗口。 |
| getParentWindow | 得到弹出当前窗口的直接父窗口 |
| getMessage | JS的国际化。 |
| loadScriptFile | 通过js脚本异步加载js文件 |
| getElementPosition | 获取当前指定元素的横、纵向坐标位置 |