在JavaScript中,您可以像这样获取XML节点的子节点......
var children = xml.childeNodes;
如何获得物体的孩子?
var obj = {
prop1: 'stuff',
prop2: 'things',
prop3: 'stuff-n-things'
}
给出一个像这样的对象..
var Obj = {
levelOneProp1: 'stuff',
levelOneProp2: 'things',
levelOneProp3: {
levelTwoProp1: 'moreStuff',
levelTwoProp2: 'morethings',
levelTwoProp3: 'morestuff-n-things'
}
}
我想知道Obj
中哪些属性有子节点,所以我可以以递归方式遍历它们。目标是能够提供一个(理论上)无限数量的孩子的数据集,并将他们的值应用于输入元素......这是我到目前为止所拥有的。
function applyData( dataSet ){
var hasChildren = false;
for(var i = 0; i < dataSet.childNodeArrayGoesHere.length; i++){
if(dataSet.detectChildNodesHere){
hasChildren = true;
}
}
if(hasChildren){
for(var j = 0; j < dataSet.childNodeArrayGoesHere.length; i++){
applyData(dataSet[j]);
}
} else {
//apply the key/value pair to an input element
$("input[name" + dataSet.propertyName + "]").val(dataSet.propertyValue);
}
}
答案 0 :(得分:7)
您可以迭代对象like this的所有属性:
var o = { prop1: 'this is prop 1', prop2: 'this is prop2'};
for(var propName in o) {
if(o.hasOwnProperty(propName)) {
alert(o[propName]);
}
}
hasOwnProperty()
函数检查以确保指定的属性实际存在于对象中。在此上下文中使用它可确保您不会获得任何继承的属性。
答案 1 :(得分:3)
您可以递归地迭代对象的所有属性like this。
找到所有结束节点,按名称选择相应的输入标签并将值放入其中。
我使用了一个只有两个级别的对象,但它可以与n级对象一起使用。
var Obj = {
id1: 'stuff',
id2: 'things',
id3: {
levelTwo1: 'moreStuff',
levelTwo2: 'morethings',
levelTwo3: 'morestuff-n-things'
}
}
function addAttributeInput(obj) {
for (var o in obj) {
if (typeof obj[o] == "object") {
addAttributeInput(obj[o]);
} else {
$("input[name='" + o + "']").val(obj[o]);
}
}
}
addAttributeInput(Obj);
答案 2 :(得分:0)
那些不是孩子,你创建了一个关联数组。
像这样访问它们:
obj[prop1]
答案 3 :(得分:-3)
您正在寻找的实际上是对象键。您可以通过调用它来检查对象密钥是否存在:
你的对象:
var obj = {
prop1: 1,
prop2: 2
}
检查是否未定义:
if (obj.prop3 === undefined) {
alert('obj key does not exist');
} else {
alert(obj.prop3);
}
或强>
if (obj["prop3"] === undefined) {
alert('obj key does not exist');
} else {
alert(obj["prop3"]);
}
或者如果您遇到一个用例,其中obj键的值可能会手动设置为undefined:
if (obj.hasOwnProperty("prop3")) {
alert(obj["prop3"])
} else {
alert('obj key does not exist');
}