`
阅读更多

1、拼接字符串时使用substring方法进行截取避免每次都判断:

在拼接字符串时需要遵从指定的格式(如用逗号隔开),后面进行取值或验证时可以按照前面的规则去除结果。但拼接的第一个值,前面往往是不需要加逗号的,通过的做法是加if判断,如果是第一个数据或拼接的字符串若为空,就不加逗号,这样子是可以解决问题,若要拼接的数据过多,每次都判断会很影响性能。个人觉得比较快刀斩乱麻的方式是直接用substring方法进行截取。如下面的例子:

public static void main(String[] args) {
	long startTime = System.currentTimeMillis();
	String str1="";
	for(int i=0;i<10000;i++){
		if(i==0){
			str1+=i;
		}else{
			str1+=","+i;
		}
	}
	System.out.println(str1);
	long endTime = System.currentTimeMillis();
	System.out.println("执行该方法所需时间:"+(endTime-startTime));//output:376
	
	long startTime2 = System.currentTimeMillis();
	String str2="";
	for(int i=0;i<10000;i++){
		str2+=","+i;
	}
	if(str2.length()>0){
		str2=str2.substring(1);
	}
	System.out.println(str1);
	long endTime2 = System.currentTimeMillis();
	System.out.println("执行该方法所需时间:"+(endTime2-startTime2));//output:320
	
}

 

2、创建Jquery对象:

平常大部分情况都是用Jquery获取已经存在的对象,今天要凭空弄一个对象出来,对于网上说的,用new关键字来new一个Jquery对象我不太在行,就自己认为的方法定义了一个,如下:

var func = "";
var $function = $(func);	
$function.attr({"functionID":77777,"funViewID":viewID,"rViewID":0,"tableListID":tableListId});
alert($function.attr(viewID)+" "+$function.attr(tableListId));
alert出来竟然是两个undefined,不知道为什么?后来参照网上的方法(参考链接:http://www.jb51.net/article/33403.htm)定义成下面这样子的:
var func = "";
var $function = $("<input>",{"id":"editRowFunc"});	
$function.attr({"functionID":77777,"funViewID":viewID,"rViewID":0,"tableListID":tableListId});
alert($function.attr(viewID)+" "+$function.attr(tableListId));
 成功alert。

 3、JS调用字符串类型的方法

最近做一应用碰到一个问题,一个onlick事件上面绑定两个方法。要是正常的拼接代码那绝对是没问题的,直接在onclick事件上面写上两个方法名称即可,但问题通常都是不正常的。我这个onclic事件只能绑定一个(不是不能绑定两个,而是没法绑定两个),没办法,只能把触发事件的名称写在了标签上的属性中,类似于:

<input onclic="aaa();" id='testInput' type="button" scriptEvent="bbb"  />

在aaa方法中处理完了之后,获取scriptEvent的属性值,然后再执行这个方法,具体方法如下:

var scriptEvent = $("#testInput").attr("scriptEvent");
if(!isempty(scriptEvent)){//说明有绑定事件
	if(scriptEvent.indexOf("(")>0){//处理自带了()的情况
		scriptEvent = scriptEvent.substring(0,scriptEvent.indexOf("("));
	}
	//执行方法
	eval(scriptEvent+"('"+val+"')");//val是要传递的参数值
}
 

 4、IE11中导入Excel时总是找不到文件

最近弄一个导Excel数据的功能,IE8中很正常,IE11和火狐中老是出错,说文件找不到。大概业务是这样子的:选择文件之后,通过AJAX进行文件上传,返回文件名称给页面,页面通过AJAX将名称传递给后台,后台读取Excel并返回。正常情况下,返回的文件名称是Object类型的,其值是字符串类型,且只有一个文件名称。但是在IE11或火狐中,这个Object的值除了文件名称之后还有一个隐藏的“\r\n”即换行符号,因此传递到后台的文件名称也有一个换行符,再根据这个含有了换行符的路径去找文件,必然找不到,所以就找不到文件啦。

解决:将Object类型的文件名称转换成String类型,然后用replace\r\n替换成空字符串。

用代码表示就是这样子的:

fileName = fileName.toString();//转换成字符串进行替换         

fileName = fileName.replace("\r","").replace("\n","");//将换行符替换成空字符串

 

5、使用JS判断文件类型:

/**
* 该方法根据文件的后缀名判断文件类型
* @param fileType:文件格式
* */
function getFileType(fileType){
	var flag=0;
	if(fileType!=null && fileType.length>0){
		fileType = jQuery.trim(fileType);
		switch(fileType){
			//图片格式
			case "gif":flag=1;break;
			case "jpg":flag=1;break;
			case "jpeg":flag=1;break;
			case "png":flag=1;break;
			case "bmp":flag=1;break;
			
			//office格式
			case "doc":flag=2;break;
			case "docx":flag=2;break;
			case "xls":flag=2;break;
			case "xlsx":flag=2;break;
			case "ppt":flag=2;break;
			case "txt":flag=2;break;
			
			//视频格式
			case "mp4":flag=3;break;
			case "avi":flag=3;break;
			case "wmv":flag=3;break;
			case "rmvb":flag=3;break;
			case "rm":flag=3;break;
			case "flv":flag=3;break;
			case "flash":flag=3;break;
			case "mp4":flag=3;break;
			case "3gp":flag=3;break;
			case "mpg":flag=3;break;
			case "vob":flag=3;break;
		}
		
		//或者使用EL表达式
		if((/(?:jpg|gif|png|jpeg|bmp)$/i.test(fileType))){
			fileType="1";
		}else if((/(?:doc|docx)$/i.test(fileType))){
			fileType="2";
		}else if((/(?:xls|xlsx)$/i.test(fileType))){
			fileType="3";
		}else if((/(?:rar|zip)$/i.test(fileType))){
			fileType="4";
		}
	}
	return flag; 
}
 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics