Re: [已解決] 關於DOM節點 Undifine

看板Ajax作者 (鼎玉鉉)時間15年前 (2010/09/10 17:19), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
※ 引述《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
文章代碼(AID): #1CYVWmDz (Ajax)
討論串 (同標題文章)
文章代碼(AID): #1CYVWmDz (Ajax)