<html>
<head><title></title>
<style>
body{font-size:12px}
td{font-size:12px}
</style>
<script type="text/javascript">
window.onload=loadsection
function createXmlDom(){
if(window.ActiveXObject){
  var xmldoc=new ActiveXObject("MSXML2.DOMDocument.4.0")
  return xmldoc
}
else if(document.implementation && document.implementation.createDocument){
  var xmldoc=document.implementation.createDocument("","",null)
  return xmldoc
}
else{throw new Error("你的浏览器不支持")}
}
function loadsection(){
var xml=createXmlDom()
xml.load("menu.xml")
var arr=xml.getElementsByTagName("province")
alert(arr.length)
for(var i=0;i<arr.length;i++){
document.myform.province.options[i]=new Option(arr[i].attributes[1].nodeValue,arr[i].attributes[1].nodeValue)
}
for(var j=0;j<arr[0].childNodes.length;j++){
document.myform.city.options[j]=new Option(arr[0].childNodes[j].firstChild.nodeValue,arr[0].childNodes[j].firstChild.nodeValue)
}
}
</script>
</head>
<body>
<form name="myform">
<table style="border:1 solid;"><tr><td width="120px">
省份:<select name="province" onchange="setsection()">
</select>
</td><td width="120px">
城市:<select name="city">
</select>
</td></tr></table>
</form>
</body>
以上代码在IE中可以正常运行,但是在FF中不能起作用,arr[0]的长度为何会是0,IE中能返回正解的长度,请达人帮忙!

解决方案 »

  1.   

    <?xml version="1.0" encoding="gb2312"?>
    <configure>
    <province id="p0" name="广东">
    <city>深圳</city>
    <city>东莞</city>
    <city>中山</city>
    <city>惠州</city>
    <city>珠海</city>
    <city>梅州</city>
    <city>广州</city>
    <city>韶关</city>
    <city>佛山</city>
    <city>汕头</city>
    </province>
    <province id="p1" name="湖北">
    <city>武汉</city>
    <city>荆州</city>
    <city>随州</city>
    <city>襄樊</city>
    <city>宜昌</city>
    <city>十堰</city>
    <city>恩施</city>
    <city>仙桃</city>
    <city>鄂州</city>
    <city>孝感</city>
    </province>
    <province id="p2" name="湖南">
    <city>长沙</city>
    <city>张家界</city>
    <city>株州</city>
    <city>邵阳</city>
    <city>常德</city>
    <city>郴州</city>
    <city>衡阳</city>
    <city>岳阳</city>
    <city>永州</city>
    <city>湘潭</city>
    </province>
    </configure>
      

  2.   

    恩 else if(document.implementation && document.implementation.createDocument){
      var xmldoc=document.implementation.createDocument("","",null)
      return xmldoc
    }==>else if(document.implementation && document.implementation.createDocument){
      var xmldoc=document.implementation.createDocument("","",null)
      xmldoc.async = false;
      return xmldoc
    }
      

  3.   

    另外 你的xml
    encoding="utf-8"
      

  4.   

    我在firefox下测试了你的代码
    没有问题~~
    当然前提是要关掉异步
      

  5.   

    改成utf-8后IE中也返回0了,FF中还是不正常。
      

  6.   

    o(╯□╰)o~utf-8是为了在FF下不乱码的 不影响你这个问题的结果你说FF下不正常,提示什么错误么
    或者说你的路径名有中文吗
      

  7.   

    错误控制台中提示arr[].childNodes[].firstChild is null
    没有中文路径,直接在根目录中
      

  8.   

    xml.load("menu.xml")
    var arr=xml.getElementsByTagName("province")
    alert(arr.length)
    你在load menu.xml之后 你把xml打印出来看下!~~~有的话你尝试下xml.documentElement.getE.....还不行的话 你去下个FF小插件,firebug帮你找出问题!!!
      

  9.   

    你都没有arr怎么会有childNodes的呢。我不能理解。
      

  10.   

    如果把alert语句去掉,就提示arr[0] is undefined
    加上就提示arr[0].childNodes[j].firstChild is null
      

  11.   

    恩哼,还是异步的问题
    理由很简单arr[0] is undefined 说明没有arr是空,所以不存在arr[0]arr[0].childNodes[j].firstChild is null是说明arr[0]存在,甚至childNodes[j]都存在。只是firstChild没有~
      

  12.   

    你把XML文件里所有换行干掉看看