视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001 知道1 知道21 知道41 知道61 知道81 知道101 知道121 知道141 知道161 知道181 知道201 知道221 知道241 知道261 知道281
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
浏览器兼容的JS写法总结_javascript技巧
2020-11-27 21:49:44 责编:小采
文档
一、元素查找问题
1. document.all[name]
(1)现有问题:Firefox不支持document.all[name]
(2)解决方法:使用getElementsByName(name),getElementById(id)等来替代。

2. 集合类对象问题
(1)现有问题:IE中对许多集合类对象取用时可以用 (),但在Firefox只能用[]。
如:IE中可以使用document.forms("formName")来返回名字为"formName"的Form,但在Firefox却行不通。
(2)解决方法:使用[],上例中可以改为document.forms["formName"]

3. HTML元素的ID在JavaScript可见
(1)现有问题:IE中HTML元素中的ID可以作为document的下属对象变量名直接使用。在Firefox中不能。
(2)解决方法:使用getElementById("idName")代替idName作为对象变量使用。

4. eval(idName)取得对象
(1)现有问题:在IE中,利用eval(idName)可以取得ID为idName的HTML对象,在Firefox中不能。
(2)解决方法:用 getElementById(idName) 代替 eval(idName)。

5. 变量名与某HTML对象ID相同
(1)现有问题:在Firefox中,因为对象ID不作为HTML对象的名称,所以可以使用与HTML对象id相同的变量名,IE中不能。
(2)解决方法:在声明变量时,一律加上var,以避免歧义,这样在IE中亦可正常运行。此外,最好不要取与HTML对象id相同的变量名,以减少错误。

注:3、4和5都属于同一类的问题。

6. Frame
(1)现有问题:在IE中可以用window.top.frameId和window.top.frameName来得到该Frame所代表的Window,Firefox中只能用window.top.frameName。
(2)解决方法:将Frame的Id和Name设置成相同,使用window.top.frameName来访问Frame。

二、DOM操作
1. 设置元素的文本内容。
(1)现有问题:IE使用innerText,而Firefox使用textContent来设置元素文本内容。
(2)解决方法:如果文本内容不包含"<"和">"等特殊字符,可以使用innerHTML。否则,可以使用:



2. parentElement,parent.children
(1)现有问题:IE可以使用parentElement获得父结点,parent.children得到结点的所有孩子结点。Firefox不支持。
(2)解决方法:使用parentNode和parent.childNodes。

3. 对childNodes的解释。
(1)现有问题:IE和Firefox中对childNodes的解释不同,IE不会包含空白文本结点,而Firefox会包含。
(2)解决方法:使用childNodes过滤文本结点,如下:



4. 对document.getElementsByName的解释。
(1)现有问题:IE中getElementsByName只会检查元素,而在Firefox下会检查所有元素。
(2)解决方法:不要使用getElementsByName检查除之外的元素,如果要获得单个元素,尽量使用getElementById。

5. 对document.getElementById的解释。
(1)现有问题:IE中getElementById不仅检查Id属性,也会检查Name属性,当Name属性匹配参数时也会返回该元素。而在Firefox中只会检查Id属性。
(2)解决方法:尽量保持Id和Name相同,不要让一个元素name属性和另一个元素的id属性相同。

三、事件
1. event.x与event.y问题
(1)现有问题:在IE中,event对象有x,y 属性,Firefox中没有。
(2)解决方法:在Firefox中,与event.x 等效的是 event.pageX。可以使用:
mX = event.x ? event.x : event.pageX;

2. window.event
(1)现有问题:使用window.event无法在Firefox上运行
(2)解决方法:
原代码(可在IE中运行):

Firefox:



(2)解决方法:比较好的方法给Firefox的Element添加selectNodes方法。



这样在IE和Firefox中就都可以调用selectNodes方法了。

5. XSLT支持
(1)现有问题:IE中可以使用XmlDOM的transferNode方法将其转换成html,而Firefox需要使用XSLTProcessor。
IE:



Firefox:



(2)解决方法:比较好的方法给Firefox的Node添加transferNode方法。



这样在IE和Firefox中就都可以调用transferNode方法了。

下载本文
显示全文
专题