我正在从JSON对象tableobj
生成html元素,并通过elementArray
函数将它们分配给数组generate()
,这很有用,但问题是当我通过{ {1}} elementArray
函数我收到以下错误。
未捕获的TypeError:无法读取未定义的属性'appendChild'
我正在寻找的是assemble()
的输出结构表,该表基于assemble()
属性。
例如:将binding
追加到<thead>
因此<table>
的绑定将为0,因为其父元素为<thead>
,即elementArray[0]
。 <table>
的相同模式将为00,因为<tr>
子元素<table>
将为0
,等等...
// CODE
<thead>
答案 0 :(得分:1)
我相信我理解你想要完成的事情:
采用以下字符串和数组
var str = "[0][0]";
var arr = [["a"], ["b"]];
eval("arr" + str);
=> "a"
在这里,您已根据动态字符串括起来进入数组。
此eval的等效代码为:
arr[0][0];
答案 1 :(得分:1)
遍历绑定中的字符,获取每个元素的子元素以深入到DOM中。当你到达最后,将新元素作为孩子附加。
function assemble(o){
o.forEach(function(ele){
var position = ele.position;
if (position.length == 0) {
return;
}
var cur = o[0];
for (var i = 1; i < position.length; i++) {
cur = cur.children[position[i]];
}
cur.appendChild(ele);
});
}
答案 2 :(得分:0)
也许你正在寻找这个。它使用给定的路径作为数组code
的索引。
var path = '[0][0][0]',
code = [];
function setValue(array, path, value) {
var pathA = path.match(/\d+/g),
index = pathA.pop(); // save last index for access
pathA.reduce(function (r, a) {
if (!(a in r)) {
r[a] = [];
}
return r[a];
}, array)[index] = value;
}
function getValue(array, path) {
return path.match(/\d+/g).reduce(function (r, a) {
return r[a];
}, array);
}
setValue(code, path, 42);
document.write('<pre>' + JSON.stringify(code, 0, 4) + '</pre>');
document.write(getValue(code, path));