я генерация HTML элементов из объекта JSON tableobj
и назначить их в массив elementArray
через функцию generate()
, это прекрасно работает, но проблема в том, когда я прохожу elementArray
функции assemble()
я получаю следующая ошибка.Доступ массива со строкой ключа
Uncaught TypeError: Cannot read property 'appendChild' of undefined
То, что я ищу, чтобы иметь выход из assemble()
структуру таблицы, которая основана на binding
собственности.
Например: добавление к <thead>
<table>
поэтому <thead>
«S связывания будет 0, так как его родительский элемент elementArray[0]
который был бы <table>
. Этот же шаблон для <tr>
будет 00, так как это будет <table>
дочерний элемент 0
который будет <thead>
и т.д ...
// КОД
<script>
var tableobj = [
{table:{binding:""}},
{thead:{binding:"0"}},
{tbody:{binding:"0"}},
{tr:{binding:"00"}},
{th:{binding:"000"}},
{th:{binding:"000"}},
{th:{binding:"000"}}
];
function init(){
//GENERATE HTML & BIND PROPERTIES
var elementArray = generate(tableobj);
console.log(elementArray);
//ASSEMBLE THE TABLE --- example: elementArray[0].appendChild(thead)
var elementAssembly = assemble(elementArray);
console.log(elementAssembly);
console.log(elementAssembly[0]);
//OUTPUT
//TABlE->THEAD
//TABlE->THEAD
//TABlE->THEAD->TR
//TABlE->THEAD->TR->TH
//TABlE->THEAD->TR->TH
//TABlE->THEAD->TR->TH
}
function assemble(o){
o.forEach(function(ele){
var position = ele.position.replace(/0/g,"[0]");
var position = ele.position.split('');
if(ele.position.length > 0){
//WHERE MY QUESTION LIES....
var parent = o[position];
parent.appendChild(ele);
}
});
return o;
};
function generate(o){
var struct = o.map(function(ele,i){
var element = document.createElement(Object.keys(ele));
for(prop in ele){
var key = Object.keys(ele[prop]);
key.forEach(function(attr){
switch(attr){
case "binding":
Object.defineProperty(element,'position',{
value: ele[prop][attr]
});
break;
}
});
}
return element;
})
return struct;
}
//ONLOAD TRIGGER INIT
document.addEventListener('DOMContentLoaded', init);
</script>
Хорошо, что ваш вопрос? Можете ли вы дать некоторый образец вывода? Я не знаю, что вы хотите ... Вы можете добавить что-то в массив, используя ['Array.push'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ Array/толчок). – usandfriends
Почему 'appendChind'? вы работаете с элементами DOM? Если это так, покажите фрагмент из дерева DOM с этими элементами – RomanPerekhrest
. Мой вывод будет элементом, добавляемым к правильному узлу в массиве. –