Chinaunix首页 | 论坛 | 博客
  • 博客访问: 518854
  • 博文数量: 91
  • 博客积分: 9223
  • 博客等级: 中将
  • 技术积分: 1777
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-02 17:37
个人简介

!!!!!!!!!!!!

文章分类

全部博文(91)

文章存档

2013年(3)

2012年(4)

2011年(37)

2010年(36)

2009年(9)

2008年(2)

分类: LINUX

2011-02-16 19:30:40

JS 在IE和FireFox中的区别(三)

文章分类:Web前端

7form表单提交问题
jsp页面有一表单,如果表单里有两个按钮,两个按钮有不同事件方法,问题是 点击一个按钮会同时出发两个按钮的事件方法。
解决办法,看jsp页面中的两按钮标签周围是否被包含有标签,如有删除标签即可。
8DOM tree的小问题,
我就是想数一下这个table下有几个子nodes,就是body->table->tbody->然后是两个tr, 所以就应该是2啊,可是alert弹出来的是5,这么弄有什么不对吗





cell 1
cell 2



ie中,只出现2nodeName,都是TR,而在firefox中,出现5nodeName,分别是: #text
TR #text TR #text

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


cell 1
cell 2

firefox中,可以看到有2TR

 

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

 

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

 

9)不同浏览器javascriptgetYear年份函数兼容问题

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

先举个例子
Firefox 上一些网站会看到这样的提示
现在时间是 10688

而用 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
无效 此方法可用并在IEFirefox都可得到

 

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);

}

11fireEventIE中能用但在 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   );

    }

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

13FireFox中类似 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];有待继续研究。

4table中的bordercolorFirefox中不能实现功能,必须用CSS实现

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

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

   导入方式:

    .STYLE1 {color: #FF0000}

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

修改为link导入:

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];

JS 在IE和FireFox中的区别(二)

文章分类:Web前端

10.   const 问题
现有问题:
IE
:不支持 const 关键字。如 const constVar = 32; IE中这是语法错误。
FF
:支持
解决方法:不使用 const ,以 var 代替。

11.   body 对象
IE
:在body标签完全被读入之后才存在
FF
:在body标签没有被浏览器完全读入之前就存在

12.   自定义属性问题
IE
:可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute()获取自定义属性
FF
:只能使用getAttribute()获取自定义属性.
解决方法:统一通过getAttribute()获取自定义属性

13.   event.srcElement问题
IE
even.srcElement
FF
even.target
解决方法:使用时判断浏览器类型,各用各的。

14.   模态和非模态窗口
IE
:支持模态和非模态窗口
FF
:不支持
解决方法:直接使用window.open(pageURL,name,parameters)方式打开新窗口。如果需要将子窗口中的参数传递回父窗口,可以在子窗口中使用window.opener来访问父窗口。

15.   innerText
IE
innerText
FF
textContent

16.   类似 obj.style.height = imgObj.height 的语句
IE
:有效
FF
:无效
解决方法:统一使用obj.style.height = imgObj.height + 'px';

 

 

JS 在IE和FireFox中的区别

文章分类:Python编程

1.    HTML 对象的 id 作为对象名的问题
IE
HTML 对象的 ID 可以作为 document 的下属对象变量名直接使用
FF
:不支持
解决方法:使用document.getElementById
替代document.all

2.       如果控件只有name,没有id, getElementById:
IE
:可以找到对象

FF
:返回NULL
解决方法:所有控件必须设置ID属性

3.       Evel:
IE
:支持,利用 eval(idName) 可以取得 id idName HTML 对象
FF
:不支持。
解决方法:统一使用
getElementById(idName) 代替 eval(idName)

4.       Event
IE
:用全局对象window.event
FF
event只能在事件发生的现场使用,在调用函数时传入event对象

解决方法:使用之前做一下浏览器类型判断,各用各的。

5.       对象名称中美元符号‘$’改为使用下划线‘_’

6.       集合类对象问题
IE
:可以使用()[]获取集合类对象
FF
:只能使用[]获取集合类对象
现有代码中存在许多,不能在 FF 下运行
解决方法:统一使用[]获取集合类对象。document.form.item("itemName") 这样的语句改为document.form.elements["elementName"]

7.       变量名与某 HTML 对象 id 相同的问题
IE
:不能
使用与 HTML 对象 id 相同的变量名
FF
:可以使用
解决方法:在声明变量时,一律加上 var ,以避免歧义,这样在 IE 中亦可正常运行。
此外,最好不要取与 HTML 对象 id 相同的变量名,以减少错误。

8.       Event定位问题
IE
:支持event.x event.y
FF
:支持
event.pageXevent.pageY
解决方法,统一使用event.clientXevent.clientY,但是在FFevent.clientX event.pageX 有微妙的差别(当整个页面有滚动条的时候),不过大多数时候是等效的。如果要完全一样,可以判断浏览器类型后对应使用。

9.       父结点的问题
IE
parentElement parentElement.children
FF
parentNode parentNode.childNodes
childNodes
的下标的含义在IEFF中不同,FF使用DOM规范,childNodes中会插入空白文本节点。一般可以通过node.getElementsByTagName()来回避这个问题。



html中节点缺失时,IEFFparentNode的解释不同,例如






IE
input.parentNode的值为空节点
FF
input.parentNode的值为form
FF
中节点没有removeNode方法,必须使用如下方法 node.parentNode.removeChild(node)

阅读(1690) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~