更新:
有人说他们能够获得超过1个childNode ...
这是我的fiddle-我只能显示1个childNode。
错误在哪里?
原始问题
以下是我继承的JavaScript代码的部分代码段。基本上,此函数用于通过调用AJAX函数来获取XML数据。但是,由于需求变更,我正在生成XML字符串,并将该字符串存储在屏幕上的隐藏输入变量中(经典ASP)。
仔细查看原始脚本后,我发现如果我能以某种方式将xml字符串传递到cmdxml变量中,那将是很好的。但是,当我将cmdxml设置为等于我的xml字符串:cmdxml = $.parseXML(xmlVal);
,然后尝试使用下面的代码段时,它只会得到1个子节点。我在下面传递了一小段xml字符串。
使用cmdxml的旧Javascript函数(部分):
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>
最佳答案
parseXML返回XMLDocument。您需要设置cmdxml zo $ .parseXML('snippet')。documentElement来访问childNodes(childNodes是节点的属性,通常在文档中不可用)。
您的小提琴返回了一个childNode,但这是根元素,您想访问根元素的childNodes。