作者sk1765 (鼎玉铉)
看板Ajax
标题Re: [已解决] 关於DOM节点 Undifine
时间Fri Sep 10 17:19:42 2010
※ 引述《rex921 (小雷)》之铭言:
: 在IE底下.假如我的XML的架构是
: <root>
: <response>
: <passed>
: <love>
: </love>
: </passed>
: <message>
: <word>
: </word>
: </message>
: </response>
: </root>
: 在这里我要取得 <love></love>里面的内容 像底下写法
: var xmldoc = http_request.responseXML;
: var mes =
: xmldoc.getElementsByTagName('response')[0].childNodes[0].childNodes[0]
: .firstChild.nodeValue;
: IE要一层一层写出来,没办法直接取到<love>这个Tag的nodeValue
: 这是我遇到的问题 搞了好久,不同浏览器好像都有不同的解析....囧..
xmldoc.getElementsByTagName('response')[0].
childNodes[0].childNodes[0].firstChild.nodeValue;
这段程式码在的搜寻 叫做 short-distance travel
也就是从一个元素到另一个元素的移动都是相邻的元素
移到一个相邻的元素後再移到另一个
但是这样做会有三个问题
第一 程式码的可读性很差没人知道这样移来移去到底是移到哪里了 除非维护的人
对该文件dom的结构也很清楚
第二 文件内容常会做处理 也许<love> element 会搬移到其他位置
那麽在重复这段同样的程式码时 就完全搞不清楚抓到哪个element
第三 在w3c的浏览器 空格,换行,tab 都是文字内容 所以会建立一个空的文字节点
举例来说 你的<passed> 和 <love>两个元素 中间还夹了另一个元素
内容是empty的文字节点 所以以你刚才的程式 在firefox 是到不了目的地的
解决空元素的办法有二
第一 把文件中间的空白还有换行除去 如下中间完全没有换行
<root><response><passed><love></love></passed><message><word></word></message></response></root>
第二 根本不用short-distance travel 直接用long-distance travel的操作
xmldoc.getElementsByTagName('response')[0].
getElementsByTagName('love')[0].firstChild.nodeValue;
这样是可以找到的 不一定要一层一层写
而且程式码阅读起来容易多了 就算元素被移动 程式码依就可用
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.137.128.219