Re: [已解決] 關於DOM節點 Undifine
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
Ajax 近期熱門文章
PTT數位生活區 即時熱門文章