2011-03-30 98 views
5

我試圖用這個方法用jQuery來訪問連接到的HTML文件(生成的東西)結束XML內容:jQuery的XML解析IE7/IE8

$("SELECTION_STATE").find("CHARACTERISTIC").each(function() { 
    if($(this).attr("name") == "Z_MDST") { 
     alert($(this).find("MEMBER").attr("name")); 
    } 
}); 

能正常工作在Firefox和Chrome,但不在IE中,它不會提醒任何事情。

這是XML我試圖穿越

<SELECTION_STATE> 

    <SELECTION type="CARTESIAN_PRODUCT"> 
     <CHARACTERISTICS> 
     <CHARACTERISTIC name="Z_MDST"> 
      <SELECTIONS> 
      <SELECTION type="SINGLE_MEMBER"> 
       <MEMBER name="00002213" type="MEMBER" text="2213"/> 
      </SELECTION> 
      </SELECTIONS> 
     </CHARACTERISTIC> 

有什麼辦法,我可以做到這一點與jQuery 1.5嗎?

在此先感謝

回答

6

因爲您處於HTML文檔中。 IE不會識別XML。

console.log($("SELECTION_STATE").get()); 

回報對象在IE

HTMLUnknownElement爲了使用XML你必須通過IE XML解析器來運行它。就像是。

var x = new ActiveXObject("Microsoft.XMLDOM"); 
x.loadXML(yourXML) 

你會顯然只是想這樣做,如果($ browser.msie)

方的問題:你與AJAX加載XML?

更新時間:完整的例子

var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
var myXML = document.body.innerHTML; // or wherever you are storing the XML in the DOM 
xmlDoc.loadXML(myXML) 

if (xmlDoc.parseError.errorCode != 0) { 
    var myErr = xmlDoc.parseError; 
    console.log("You have error " + myErr.reason); 
} else { 
    console.log(xmlDoc.xml); 
} 

$("SELECTION_STATE", xmlDoc).find("CHARACTERISTIC").each(function() { 
    if($(this).attr("name") == "Z_MDST") { 
     alert($(this).find("MEMBER").attr("name")); 
    } 
}); 
+0

謝謝。 不,這是一個特殊情況,我需要通過幾行javascript訪問同一文檔(封閉源代碼商業產品)中生成的HTML內容。沒有涉及的AJAX :-( 我會嘗試你的建議 – 2011-03-30 13:08:16

+0

相關的問題 - 我將如何管理加載當前文檔? – 2011-03-30 13:14:25

+0

重要的是要注意XML必須驗證,否則IE不會解析它(這不是寬容作爲HTML ..)你是第一個例子錯過了一些結束標籤 – Daniel 2011-03-30 13:16:30

6

既然你已經在使用jQuery使用parseXML功能(http://api.jquery.com/jQuery.parseXML/在1.5版本中添加)

var xmlDoc = $.parseXML(data); 

$(xmlDoc).find("CHARACTERISTIC").each(function() { 
    if($(this).attr("name") == "Z_MDST") { 
     alert($(this).find("MEMBER").attr("name")); 
    } 
}); 
+0

這似乎並沒有工作,我使用jQuery 1.7和測試ie8上win7 – somid3 2012-12-17 21:16:09

+0

它是重要的是要記住,在IE中,不能使用'.html()'來獲取節點的內容。你必須使用'.text()' – 2015-05-11 00:17:05