惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy International News Feed
Simon Willison's Weblog
Simon Willison's Weblog
I
Intezer
Spread Privacy
Spread Privacy
The Hacker News
The Hacker News
P
Palo Alto Networks Blog
TaoSecurity Blog
TaoSecurity Blog
S
Secure Thoughts
Google Online Security Blog
Google Online Security Blog
H
Heimdal Security Blog
N
News | PayPal Newsroom
Attack and Defense Labs
Attack and Defense Labs
Recent Commits to openclaw:main
Recent Commits to openclaw:main
博客园 - 【当耐特】
Webroot Blog
Webroot Blog
小众软件
小众软件
Help Net Security
Help Net Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
N
News and Events Feed by Topic
Hacker News - Newest:
Hacker News - Newest: "LLM"
PCI Perspectives
PCI Perspectives
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The Cloudflare Blog
Cloudbric
Cloudbric
AI
AI
WordPress大学
WordPress大学
博客园 - 聂微东
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 三生石上(FineUI控件)
Hacker News: Ask HN
Hacker News: Ask HN
H
Hacker News: Front Page
博客园 - Franky
V
V2EX
Schneier on Security
Schneier on Security
G
GRAHAM CLULEY
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
H
Help Net Security
量子位
S
Security @ Cisco Blogs
大猫的无限游戏
大猫的无限游戏
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Recorded Future
Recorded Future
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
J
Java Code Geeks
C
Cisco Blogs
S
Security Affairs

博客园 - 龍的傳人

再谈代码生成器,拥有自己最适合的代码生成器 javascript+css+xml 全选树(再续) 设表格细钱 javascript+css+xml 全选树(续) javascript+css+xml 全选树 白话CMMI 如何做好需求收集[来之《程序员》第2期] javascript、CSS、XML动太生成树菜单 - 龍的傳人 - 博客园 可选择也可填写的下拉框(用鼠标\键盘的上下键选择) - 龍的傳人 - 博客园 兼容firefox和IE的两级联动下拉菜单的javascript代码 HTML 图片分析 JavaScript - Import XML Document firefox与IE对javascript和CSS的区别(转) IE和Firefox在JavaScript方面的兼容性(转) javascript在中ie与firefox的区别与解决方案(转) sql2000和文本文件的写入和读取(转) [转]JS代码格式化工具(附源代码) ASP.NET2.0调用MySql的存储过程 Remote建立分析
针对Firefox兼容性,要注意的一些问题 (转)
龍的傳人 · 2008-01-10 · via 博客园 - 龍的傳人

、Select列表控件

删除列表项。在IE下工作正常的代码:

需要修改为:

添加列表项。在IE下工作正常的代码:

var oOption = document.createElement('option');
oOption.text
= text;
oOption.value
= value;
targetArea.options.add(oOption);

为了提供更好的浏览器兼容性,更符合W3C DOM Level 2 HTML标准,建议改为如下代码:

var oOption = document.createElement('option');
oOption.text
= text;
oOption.value
= value;
targetArea.options[targetArea.options.length]
=new Option(text,value);

另外,selectObj.options(i),需要改为selectObj.options[i]。

2、XmlDom对象

IE下一般这样做:

var xmlDom = new ActiveXObject("Microsoft.XMLDOM");

为了兼容Firefox,需要修改为:

if (window.ActiveXObject){
var xmlDom = new ActiveXObject("Microsoft.XMLDOM");
}
else{
if (document.implementation && document.implementation.createDocument){
var xmlDom = document.implementation.createDocument("","",null);
}
}

3、对于childNodes的循环处理

var nodes=xmlDom.documentElement;
var sName; //标签文本
var sValue; //标签值

if (nodes.childNodes.length != 0) {
for (var i=0;i<nodes.childNodes.length;++i) {
oItem
= nodes.childNodes.item(i);
sName
= oItem.text;
sValue
= oItem.getAttribute("id"); // 这里会报错
addOption(targetArea,sName,sValue);
}
}

上面这段代码,在IE下完全没有问题,但是在Firefox下就毫无反应,Firefox下的错误控制台报告:oItem没有getAttribute方法,百思不得其解,经调试,发现oItem的节点类型竟然是3,也就是文本,进一步调试得知,oItem的节点类型分别是3、1、3、1....(1是节点对象),使用Firefox的Dom查看器一看,恍然大悟!其中,Xml数据字符串为:

<types>
<type id="215">验房服务</type>
<type id="216">家装设计</type>
<type id="217">建筑工程</type>
<type id="218">家装监理</type>
<type id="219">检测(环境质量)</type>
<type id="220">风水</type>
</types>

在Dom查看器中看到:

可以看到,#text节点和节点对象交替排列(id列有数据的为正常节点,例如"验房服务"、"家装设计"等等),造成当oItem为#text类型的时候调用getAttribute()方法失败,因为文本节点没有此方法。

那么,修改后的代码是:

var nodes=xmlDom.documentElement;
var sName; //标签文本
var sValue; //标签值
var oItem,sName,sValue,oOption;
if (nodes.childNodes.length != 0) {
for (var i=0;i<nodes.childNodes.length;++i) {
var oItem = nodes.childNodes[i];
if(oItem.nodeType == 1){ //判断是否是Element类型
sName = oItem.childNodes[0].nodeValue; //这里需要注意下
sValue = oItem.getAttribute("id");
var oOption = document.createElement('option');
oOption.text
= sName;
oOption.value
= sValue;
objType.options.add(oOption);
}
}
}

还有一点需要注意的是oItem.text无法在Firefox中取得节点的值,取而代之的是:

oItem.childNodes[0].nodeValue;

至此,真相大白!

附录1:帮助我解决问题的两篇关键文章:

1、http://www.sitepoint.com/forums/showthread.php?t=307056&goto=nextnewest

2、http://www.thescripts.com/forum/thread471907.html

附录2:Node的类型

nodeType Named Constant nodeTypeString nodeName nodeValue
1 ELEMENT_NODE element tagName null
2 ATTRIBUTE_NODE attribute name value
3 TEXT_NODE text #text content of node
4 CDATA_SECTION_NODE cdatasection #cdata-section content of node
5 ENTITY_REFERENCE_NODE entityreference entity reference name null
6 ENTITY_NODE entity entity name null
7 PROCESSING_INSTRUCTION_NODE processinginstruction target content of node
8 COMMENT_NODE comment #comment comment text
9 DOCUMENT_NODE document #document null
10 DOCUMENT_TYPE_NODE documenttype doctype name null
11 DOCUMENT_FRAGMENT_NODE documentfragment #document fragment null
12 NOTATION_NODE notation notation name null