UPDATE: 有人說,他們能夠獲得超過1個childNode ... 這裏是我的fiddle - 我只獲得1個childNode顯示。JavaScript的幫助 - 做一個老派的方式新的東西
錯誤在哪裏?
原來的問題 下面是我繼承了javascript代碼的部分片段。基本上這個函數通過調用AJAX函數來獲取XML數據。但是,由於需求更改,我生成一個XML字符串並將該字符串存儲在屏幕上的隱藏輸入變量中(經典ASP)。
在仔細觀察原始腳本後,我發現如果我能以某種方式將我的xml字符串傳入cmdxml變量將會很好。但是,當我設置cmdxml等於我的xml字符串:cmdxml = $.parseXML(xmlVal);
,然後嘗試使用下面的代碼片段,它只獲得1個子節點。我已經在下面傳遞了一個xml字符串的小片段。
舊JavaScript函數(部分)使用cmdxml:
if (req.responseXML!=null) {
var PropName;
var PropValue;
var cmdxml = req.responseXML.documentElement;
// read each document element child node in the XML document
for (var c =0;c<cmdxml.childNodes.length;c++) {
var m;
var t = cmdxml.childNodes[c]; //req.responseXML.documentElement.childNodes[c]
if (t!=null) {
//console.log(t.nodeName);
switch(t.nodeName) { //req.responseXML.documentElement.childNodes[c].nodeName
case "RObject": { //response object
var RObject = t;
//req.responseXML.documentElement.childNodes[c].nodeName.attributes[2].value
var CtrlChangeType = RObject.attributes[2].value;
var CtrlObjName = RObject.attributes[1].value;
var CtrlObjType = RObject.attributes[0].value;
var CtrlObj;
var RObjProp = RObject.getElementsByTagName("Property");
PropName = RObjProp[0].attributes[0].value;
PropValue = getElementText(RObjProp[0].getElementsByTagName("Value")[0]);
switch (CtrlChangeType) { //req.responseXML.documentElement.childNodes[c].nodeName.attributes[0].value
case "comboboxInsRow": {
這裏是我的XML字符串的一個片段,我路過:
<?xml version="1.0" ?><xCMDS><JCallBack ProgramName="x"><Value><![CDATA[top.closeCtrlLoading();]]></Value></JCallBack><RObject Type="E" Name="gH2ptObj_co_code" ChangeType="objProp" rowNum="" colNum=""><Property Name="value"><Value><![CDATA[]]></Value></Property></RObject>
當我使用'alert($。parseXML('snippet')。documentElement.childNodes.length)'時,我得到了2個childNodes代碼片段,'' 。但我追加了遺漏的結尾''-tag。 –
@ Dr.Molle - 我看到你在這裏做了什麼。爲什麼我不能將$ .parseXML(xmlVal)傳遞給cmdxml? - 順便說一句,如果你把這個作爲答案我會接受它。 – webdad3