我有一个功能节目,它基本上做的是显示我的xml的节点和属性。我创建了一个对象属性来存储每个属性的名称和值。这部分运作良好。现在,当我将此对象传递给另一个函数时,我无法检索属性的名称和值。它说aname和avalue是不确定的。有人可以帮忙吗?
我的代码:
function show(){
:
var mytag2 = child.nodeName;
var mytagvalue2 = child.textContent;
var attributes = [];
for (var k = 0; k < child.attributes.length; k++) {
var attrib = child.attributes[k];
if (attrib.specified === true) {
attributes.push({aname: attrib.name, avalue: attrib.value});
$("#maincontent").append("<li>" + attributes[k].aname + " = " +
attributes[k].avalue + "</li>");
}
}
$("#maincontent").append("<td><button id=\"popup\" onclick=\"div_show('" + mytag2 + "','" + mytagvalue2 + "','" + attributes + "')\">Edit</button></td><td></td></tr>");
}
function div_show(tag, tcontent, attributes){
for (i = 0; i < attributes.length; i++) {
var target = document.getElementById('attributes');
target.innerHTML = '';
target.innerHTML += "<input id=" + "'" + attributes[i].aname + "'" + " " +
"type = text" + " " + "name=" + "'" + attributes[i].aname + "'" + ">";
document.getElementById("'" + attributes[i].aname + "'").value =
attributes[i].aname;
document.getElementById("'" + attributes[i].avalue + "'").value =
attributes[i].avalue;
}
}
答案 0 :(得分:3)
如果不讨论为什么要以不同的方式完成所有这些操作,我会指出问题,以及如何解决问题。
在您的代码中,您正在创建一个字符串:
$("#maincontent").append("<td><button id=\"popup\" onclick=\"div_show('" + mytag2 + "','" + mytagvalue2 + "','" + attributes + "')\">Edit</button></td><td></td></tr>");
attributes
是一个数组对象,它将在其上调用toString()
方法,以便将其连接到正在构建的字符串。这会将其呈现为[object Object]
。
你应该将它序列化为JSON,并将其连接起来(同样删除字符串周围的引号,因为你想传递你的数组对象)。
$("#maincontent").append("<td><button id=\"popup\" onclick=\"div_show('" + mytag2 + "','" + mytagvalue2 + "'," + JSON.stringify(attributes) + ")\">Edit</button></td><td></td></tr>");
这将生成一个类似于您想要传递的数组的字符串:
[{"aname":"someName","avalue":"someValue"}]
这是一个简单的例子,展示了我所谈论的内容:
var attributes = [
{ aname: 'test1', avalue: 'test1' },
{ aname: 'test2', avalue: 'test2' }
];
var arrayConcatenated = 'Array Concatenated: ' + attributes;
var arrayJSONConcatenated = 'Array JSON Concatenated: ' + JSON.stringify(attributes);
document.getElementById('arrayConcatenated').innerHTML = arrayConcatenated;
document.getElementById('arrayJSONConcatenated').innerHTML = arrayJSONConcatenated;
&#13;
<div id="arrayConcatenated"></div>
vs.
<div id="arrayJSONConcatenated"></div>
&#13;