我只是无法弄清楚如何检索传递的对象的名称和值

时间:2015-07-23 16:41:18

标签: javascript jquery html

我有一个功能节目,它基本上做的是显示我的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;      
  }
}

1 个答案:

答案 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"}]

这是一个简单的例子,展示了我所谈论的内容:

&#13;
&#13;
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;
&#13;
&#13;