1、js精确计算两个浮点数加法
思路:将乘数和被乘数乘以小数点较大的10的幂指数方,将浮点数转换为整数,然后相加后除以幂指数方即可转化为小数
例子:
<html>
<head>
<script type="text/javascript">
function test() {
FloatAdd(12.1112,0.00001100003999);
//alert();
}
//浮点数加法运算
function FloatAdd(arg1,arg2){
var r1,r2,m;
try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
m=Math.pow(10,Math.max(r1,r2));
alert((arg1*m+arg2*m)/m);
//return (arg1*m+arg2*m)/m
}
</script>
</head>
<body>
<a οnclick="test();" href="#">测试浮点数加法</a>
</body>
</html>
2、jQuery
1)jQuery中选择器中多个条件中间有一个空格表示前面的选择器满足后,只要它的后代节点中有满足第二个条件的即可,如果中间是”~“ 则表示必须是儿子节点。
如:$("form table")表示form下的子节点中所有的table,而$("form ~ table")表示form的儿子节点中中的table。
2)jQuery实现元素隐藏
$("#xxx").css('display', 'none');
3、js数组
var arrayObj = new Array();
arrayObj.push(obj); //将obj对象放到数组中
arrayObj.pop(); //弹出最上面的元素
属性:length、constructor、prototype
5、param获取URL中的参数,示例代码:
${param.arg1}
6、在jsp中使用EL表达式获取后台对象时,最好指定域,page、request、Session、application,示例代码:
request: ${requestScope.user.userId} // 拿request域中user对象中的userId属性
7、EL表达式中两种获取属性方式“."和”[ ]“,前者是获取bean属性或是Map,后者是获取数组或是List,也可以结合使用,示例代码:
${sessionScope.userinf[0].id } // 获取Session中第一个user的id属性,使用“[ ]”可以使用特殊字符
8、js中top.parent.frame
top:该变量永远只分割窗口最高层次的浏览器窗口,如果计划从分割窗口的最高层次开始执行命令,可以用top变量
分割窗口:frameset或iframe中
获取frame文档对象:$(window.parent.frames["frameId“].document}
9、替换HTML中标签j替换为空字符串js代码
示例代码:
s.replace("/<[^>]+>/g", "");
10、在jsp中文档头部一般使用严格的:<!DOCTYPE HTML>即可,其他的都是过渡和基于框架的,否则会导致页面中样式的显示有些奇怪的问题
11、对于使用jQuery中的replace时,将<a>标签替换原来的文字时,a标签中的标签乱了,是因为οnclick=后面的需要用双引号,并且需要转义,不然会导致引号不匹配
1)单/双引号匹配问题会导致浏览器解析标签错乱
2)双引号需要转义
12、添加自定义属性到标签时,最好全部小写,否则有的浏览器解析会将属性全部转换为小写,这样就和原来我们自己定义的不一样了,导致取不到DOM对象,其二就是标签属性按照规范来的话也都是小写。
14、jQuery1.4和jQuery1.7使用上的不同
对于使用“[ ]”来去取dom对象的选择器在1.4上有时会失效,1.7比较稳定
13、对于input为reset类型的输入域,在刚进入页面时调用jQuery的click方法后,在input标签中的onclick属性就会被移除掉
14、在多个frame嵌套下可以通过top那第二层frame,以name拿,并且可以调用对应jsp页面的js方法,例如:
top.navFrame.insertTabs('1', true); //调用一级frame下以navFrame为name的frame,调用inserTabs方法;
//如果想拿到对应frame的dom对象,可以使用如下写法
$(top.navFrame.docment).find("#first"); //查找navFram中以first为id的元素;
注:也可以使用parent替换top,top指的是最外层的dom,parent指的是当前页面的上级页面,有时候可以通用
15、IE6兼容问题
1)a标签中的onclick表单submit不管用了,因为如果有href属性的话,默认行为是href后的代码,不会提交表单了,有两种解决方案:
一、不加href属性,样式中加上手型,模拟超链接:
代码如下:
<a οnclick="test();" style="curse :pointer" >test</a>
二、在onclick方法后加上return false,阻止a标签的默认行为;
代码如下:
<a href="javascript:void(0);" οnclick="test();return false;" >test</a>
2)HTML标签中name一般不允许更改,在IE6/IE7中不能更改,IE8可以更改,在IE7中如果对name进行赋值,将会添加submitName属性,值为想要更改name的值
,IE6我就看不到了
3)使用artDialog组件做弹出窗口时,将一个隐藏的form作为弹出窗的content,在还没有弹出该窗口时对隐藏的那个form进行标签中移除readonly属性的操作时,当需要将隐藏的form放到artDialog后,弹出来的form中依然有readonly属性,只有先将隐藏的form放到artDialog后在对form中的标签中移除readonly属性才可以成功。分析可能是IE6下无法识别别隐藏的form的原因吧,大家怎么看
16、resize多次被调用问题
在页面上点击或blur也会触发resize事件,而且不止调用一次,可以采用wresize插件解决,也可以通过设置一定的延时
17、在js中调用setTimeout方法时,由于异步的原因,最好调用setTimeout的方法后面不要有其他代码,或者是一些不会影响到setTimeout方法中调用的函数的执行,否则会导致两者同时执行时被延时的方法还没执行完,下面的代码却需要上面的结果,这样会导致页面报错,在setTimeout中函数以方法名出线,不要加括号。
18、页面表单中的输入域最好都加上英文的非法字符(包括英文表单符号),否则如果添加记录时输入java脚本后其中的内容将无法显示,但是已经存到了数据库,如“<%=test%>”,在页面列表中无法看到该内容,只有空白。
19、使用iframe或者frameset框架时不要让其滚动,不然点击出现的滚动条会jQuery报错:nodeName不是对象的错误,设置scrolling=“no",frameborder=“0”是设置边框的,默认是那种很丑的边框,一般去掉,想要加滚动条可以再frame内部的页面加滚动条。
20、使用iframe或者frameset框架时获取顶部窗口对象使用top,parent只是获取上层窗口; 计算某个元素的宽度或高度是,采用整个窗口的宽度或高度,如$(window).height();
21、使用el表达式时,对于不等使用nq,不是neq,相等是eq,对于list是否为空时,采用${empty request.result}
22、实现省略“...”需要设置style中text-overflow 和 overflow:hidden; width: 100px;
23、ie8下div下的input个数为一个时input会往上移动一点,超过一个时才会显示正常,margin才会正常起效
解决:使用span包裹在input外面即可
24、使用正则表达式获取html中的属性
Pattern p = Pattern.compile("<img[^<>]*?\\ssrc=(['\"])?(.*?)\1?\\s.*?>");
Matcher m = p.matter(html);
while(m.find()) {
imgPath = m.group(2);
}