JS代码在IE和Firefox间的区别及其他

37 篇文章 0 订阅
16 篇文章 0 订阅

7)form表单提交问题
在jsp页面有一表单,如果表单里有两个按钮,两个按钮有不同事件方法,问题是 点击一个按钮会同时出发两个按钮的事件方法。
解决办法,看jsp页面中的两按钮标签周围是否被包含有<label>标签,如有删除<label>标签即可。
(8)DOM tree的小问题,
我就是想数一下这个table下有几个子nodes,就是body->table->tbody->然后是两个tr, 所以就应该是2啊,可是alert弹出来的是5,这么弄有什么不对吗
<script>
function p(n) {
var tablenode=n.getElementsByTagName("TABLE");
var tbodynode=tablenode[0].firstChild;
var urnode=tbodynode.childNodes;
for (var i=0;i<urnode.length;i++)
alert(urnode[i].nodeName)
alert(urnode.length);
}
</script>
<body>
<table><tbody>
<tr><td>cell 1</td></tr>
<tr><td>cell 2</td></tr>
</tbody></table>
<button οnclick="p(document.body)">Press</button>
</body>
在ie中,只出现2个nodeName,都是TR,而在firefox中,出现5个nodeName,分别是: #text
TR #text TR #text

检查后,我将代码中的回车删除,代码如下:

<body>
<table><y><tr><td>cell 1</td></tr><tr><td>cell 2</td></tr></tbody></table>

<button οnclick="p(document.body)">Press</button>

</body>

在firefox中,可以看到有2个TR了

 

在结构上,第一个表单和第二个表单不同的是第一个表单的子节点间有回车或者空格,而第二个表单则是一行写到尾。大家都应该想到了吧,IE是将一个完 整标签作为一个节点。而 Firefox除了上述的的情况外,也把一个标签的结束符“>”到下一个标签的起始符“<”之间的内容(除注释外,包括任何的文字、空格、回 车、制表符)也算是一个节点了。而且这种节点也有它们自己独特的属性和值--nodeName="#text"。

 

在实际运用中,Firefox在遍历子节点时,在for循环里不妨加上:
if(childNode.nodeName=="#text") continue;
这样,便跳过不需要的操作,使程序运行的更有效率。

 

(9)不同浏览器javascript的getYear年份函数兼容问题

不同浏览器 JavaScript 的getyear年份函数兼容性问题

先举个例子
用 Firefox 上一些网站会看到这样的提示
现在时间是 106年8月8日

而用 ie 浏览器的话就显示正常的 2006年8月8日

原因就是 javascript 的兼容性问题

var today = new date();
var year = today.getYear();

在 Firefox 里面 getYear 返回的是 "当前年份-1900" 的值 (以前都如此)
而微软很NB的做了一个改动:
当today的年份大于等于2000的时候 直接把1900加上了 返回的 200X (而不是10X)
如:today年份是1999 返回99
    today年份是2000 返回2000

一个简单的解决是加一个判断:
year = (year<1900?(1900+year):year);//此方法适用IE7   试了不能用

也有另外的方法
通过 getFullYear getUTCFullYear 去调用
var year = today.getFullYear();//IE7无效 此方法可用并在IE与Firefox都可得到

 

(10)交换两行:

DOM定义了swapNode方法:node1.swapNode(node2) , 但是仅有IE正常使用,Firefox无法工作

可用下面函数来实现(两者都可)

function swapNode(node1,node2)

{

var parent = node1.parentNode;//父节点

var t1 = node1.nextSibling;//两节点的相对位置

var t2 = node2.nextSibling;

if(t1) parent.insertBefore(node2,t1);

else parent.appendChild(node2);

if(t2) parent.insertBefore(node1,t2);

else parent.appendChild(node1);

}

(11)fireEvent在IE中能用但在 Firefox中不能用

 

var obj=document.getElementById(“loaddate”);

 

obj.fireEvent(“onclick”);.   -------只能在IE可用

 

解决办法,都可用

      if(document.all)

         {

            obj.fireEvent("onclick");

         }

      else

        {    var   evtObj   =   document.createEvent('MouseEvents');   

            evtObj.initMouseEvent(   "click",   true,   true,   document.defaultView,   1,   0,   0,   0,   0,   false,   false,   true,   false,   0,   null);   

            obj.dispatchEvent(   evtObj   );

    }

(12)Firefox不支持innerText,改成innerHTML就可以了

(13)FireFox中类似 obj.style.height = imgObj.height 的语句无效
解决方法:
obj.style.height = imgObj.height + 'px';

 

(14)有关table处理问题

1):用集合获得表格对象的方法:tabobj.rows[0].cells[0];

2):修改对象的背景图片方法:

     obj.style.backgroundImage="url(图片路径)";

3):获得当前对象的下一个结点

   obj.firstChild.firstChild.nodeValue

    不能用obj.children[0];有待继续研究。

4)table中的bordercolor在Firefox中不能实现功能,必须用CSS实现

(16) iframe两者浏览器都可实现:

<iframe src="child1.html" name="ifm1" id="ifm1"

    allowtransparency="true" align="default" marginwidth="0"

    marginheight="0" frameborder="0" scrolling="no"

    width="100%"  

    οnlοad="this.height=0;var fdh=(this.Document?this.Document.body.scrollHeight:this.contentDocument.body.offsetHeight);this.height=fdh">

This message is only visible to older browsers.</iframe>

(17)css 外部文件导入失效解决:

   导入方式:

    .STYLE1 {color: #FF0000}

@import url("/carryoa/js/img/jquery.xypform.css");

修改为link导入:

<link rel="stylesheet" type="text/css"

href="/carryoa/js/img/jquery.xypform.css">

(19)

1):用集合获得表格对象的方法:tabobj.rows[0].cells[0];

2):修改对象的背景图片方法:

     obj.style.backgroundImage="url(图片路径)";

3):获得当前对象的下一个结点

   obj.firstChild.firstChild.nodeValue

不能用obj.children[0];

 

http://hi.baidu.com/ayu1106/blog/item/ea810f7af7fd0ce82e73b38c.html/cmtid/af64c50397e6fb82d53f7c22

 

 

http://www.saltstorm.net/downloads/esc/ESC.zip 下载

在WINDOWS命令行下执行


cscript ESC.wsf -ow menu2.js menu.js将会把menu.js

按照js压缩级别2来压缩(默认js压缩级别为2)为menu2.js

cscript ESC.wsf -l 3 -ow menu3.js menu.js

将会把menu.js按照js压缩级别3来压缩为menu3.js

判断浏览器内容是否已经加载

if (document.readyState!="complete") return ;

 

html代码
   <div id="tablehtml"></div>

javascript代码:

<script type="text/javascript">
   var http_request = false;
   if (window.XMLHttpRequest) {
    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) {
     http_request.overrideMimeType('text/xml');
    }
   } else if (window.ActiveXObject) { // IE
    try {
     http_request = new ActiveXObject("Msxml2.XMLHTTP");
     //禁止IE缓存
     http_request.setRequestHeader("If-Modified-Since","0");
    } catch (e) {
     try {
      http_request = new ActiveXObject("Microsoft.XMLHTTP");
     } catch (e) {
     }
    }
   }
  
   function getResponse() {
    url = "<%=basePath%>/servlet/testAjax";
    http_request.open("GET", url+"?timestampt="+(new Date()).getTime(), true);
    http_request.onreadystatechange = function() {
     if (!document.getElementById("tablehtml")) {
      return false;
     }
     var obj = document.getElementById("tablehtml");
    
     if (http_request.readyState < 4) {
    
     }
    
     if (http_request.readyState == 4) {
      var responseText = http_request.responseText;
      obj.innerHTML=responseText;
        
     }
    }
    http_request.send(null);
   }
   interval = window.setInterval("getResponse()", 1000);
   </script>

后台Servlet代码

public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

   RebuyBusiness rebuyBusiness = new RebuyBusiness();
   response.setContentType("text/html;charset=UTF-8");
   PrintWriter out = response.getWriter();
   List<RebuyBaseInfo> list = rebuyBusiness.queryByPage();
  
   StringBuffer sb = new StringBuffer();
   sb.append("<table cellPadding=/"0/" cellSpacing=/"0/" border=/"0/" style=/"width:100%;/" >");
   sb.append("<tr>");
   sb.append("<th width=/"50/">流水号</th>");
   sb.append("<th width=/"50/">公告日期</th>");
   sb.append("<th width=/"100/">债券组合代码</th>");
   sb.append("<th width=/"50/">债券全称</th>");
   sb.append("<th width=/"50/">开盘净价</th>");
   sb.append("<th width=/"50/">最新净价</th>");
   sb.append("<th width=/"50/">最高净价</th>");
   sb.append("<th width=/"50/">最低净价</th>");
   sb.append("</tr>");
     DecimalFormat df = new DecimalFormat("0.0000");
    for (RebuyBaseInfo info : list) {
    sb.append("<tr>");
    sb.append("<td>"+info.getFlowid1()+"</td>");
    sb.append("<td>"+info.getBondtype5()+"</td>");
    sb.append("<td>"+info.getMarketcode4()+"</td>");
    sb.append("<td>"+info.getMemo8()+"</td>");
    sb.append("<td>"+df.format(Math.random())+"</td>");
    sb.append("<td>"+df.format(Math.random())+"</td>");
    sb.append("<td>"+df.format(Math.random())+"</td>");
    sb.append("<td>"+df.format(Math.random())+"</td>");
    sb.append("</tr>");
   }
  
  
   sb.append("</table>");
   out.println(sb.toString());
   out.flush();
   out.close();
}

待解决问题

使用setInterval,如果客户端开多个窗口,会使客户端内存急剧上升,对服务器端没有影响。

http://hi.baidu.com/javashmily/blog/item/b6aa7dae875c36f7faed506c.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值