Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   как создать елемент с вложеными елементами (https://javascript.ru/forum/events/1207-kak-sozdat-element-s-vlozhenymi-elementami.html)

scuter 06.05.2008 18:36

как создать елемент с вложеными елементами
 
есть элемент его создаём через createElement("script"),
ну так вот как создать в нём ещё несколько элементов,
прежде чем выполнить команду appendChild(answerScript),
или есть какая нибуть другая функция в которую можно задать многомерный массив и всё выйдет так как надо.

tenshi 06.05.2008 19:42

чего ты пытаешься добиться такими странными манипуляциями? о_0

scuter 06.05.2008 20:06

просто надо как то задать массив,
например так,
var mx = [{
	tagname:'table',
	Child:[{
		tagname:'tr',
		Child:[{
			tagname:'td',
			innerHTML:'text text text text text text '
		},{
			tagname:'td',
			innerHTML:'text text text text text text '
		},{
			tagname:'td',
			innerHTML:'text text text text text text '
		},{
			tagname:'td',
			innerHTML:'text text text text text text '
		}]
	},{
		tagname:'tr',
		Child:[{
			tagname:'td',
			innerHTML:'text text text text text text '
		},{
			tagname:'td',
			innerHTML:'text text text text text text '
		},{
			tagname:'td',
			innerHTML:'text text text text text text '
		},{
			tagname:'td',
			innerHTML:'text text text text text text '
		}]
	}]
}];

потом этот массив преобразовать в HTML сод и воткнуть в страницу,
примерно так,
document.body.appendChild(mx);

Snipe 06.05.2008 20:11

Или не совсем понял суть вопроса или
var _el = document.createElement("script");
function appendElements(_arr) {
  for (var i=0; i<_arr.length; i++) {
    _el.appendChild(document.createElement(_arr[i]));
  }
  document.appendChild(_el);
}


м.б. где-то нварал %)
ПС. Начал писать еще до появления последнего поста.

А сразу через innerHTML нельзя?

tenshi 06.05.2008 20:19

сериализуй в хтмл-строку и вставь через innerHTML.

scuter 06.05.2008 23:28

ни как не понимаю почему то такая штука не работает,
function addComponent(_obj, _arr)
{
	for(var k in _arr)
	{
		if(typeof _arr[k].tagname == 'string')
		{
			var tag = _arr[k].tagname;
			var Component = document.createElement(tag);
			alert(typeof Component);
			if(typeof _arr[k].attributes == 'object')
			{
				var attributes = _arr[k].attributes;
				for(var d in attributes)
				{
					if(typeof attributes[d] == 'string')
					{
						Component[d] = attributes[d];
					}
				}
			}
			var domComponent = _obj.appendChild(Component);
			if(typeof _arr[k].Child == 'object')
			{
				addComponent(domComponent, _arr[k].Child);
			}
		}
	}
}
function init()
{
	var mx = [{
		tagname:'table',
		attributes:{
			width:'100%',
			height:'600',
			bgcolor:'#0000CC'
		},
		Child:[{
			tagname:'tr',
			Child:[{
				tagname:'td',
				innerHTML:'text text text text text text '
			},{
				tagname:'td',
				innerHTML:'text text text text text text '
			},{
				tagname:'td',
				innerHTML:'text text text text text text '
			},{
				tagname:'td',
				innerHTML:'text text text text text text '
			}]
		},{
			tagname:'tr',
			Child:[{
				tagname:'td',
				innerHTML:'text text text text text text '
			},{
				tagname:'td',
				innerHTML:'text text text text text text '
			},{
				tagname:'td',
				innerHTML:'text text text text text text '
			},{
				tagname:'td',
				innerHTML:'text text text text text text '
			}]
		}]
	}];
	addComponent(document.body, mx);
}

scuter 06.05.2008 23:36

:):):)
в опере заработало,
function addComponent(_obj, _arr)
{
	for(var k in _arr)
	{
		if(typeof _arr[k].tagname == 'string')
		{
			var tag = _arr[k].tagname;
			var Component = document.createElement(tag);
			//alert(typeof Component);
			if(typeof _arr[k].attributes == 'object')
			{
				var attributes = _arr[k].attributes;
				for(var d in attributes)
				{
					if(typeof attributes[d] == 'string')
					{
						Component[d] = attributes[d];
					}
				}
			}
			if(typeof _arr[k].innerHTML == 'string')
			{
				Component.innerHTML = _arr[k].innerHTML;
			}
			var domComponent = _obj.appendChild(Component);
			if(typeof _arr[k].Child == 'object')
			{
				addComponent(domComponent, _arr[k].Child);
			}
		}
	}
}
function init()
{
	var mx = [{
		tagname:'table',
		attributes:{
			width:'100%',
			height:'600',
			bgColor:'#0000CC'
		},
		Child:[{
			tagname:'tr',
			Child:[{
				tagname:'td',
				innerHTML:'text text text text text text '
			},{
				tagname:'td',
				innerHTML:'text text text text text text '
			},{
				tagname:'td',
				innerHTML:'text text text text text text '
			},{
				tagname:'td',
				innerHTML:'text text text text text text '
			}]
		},{
			tagname:'tr',
			Child:[{
				tagname:'td',
				innerHTML:'text text text text text text '
			},{
				tagname:'td',
				innerHTML:'text text text text text text '
			},{
				tagname:'td',
				innerHTML:'text text text text text text '
			},{
				tagname:'td',
				innerHTML:'text text text text text text '
			}]
		}]
	}];
	addComponent(document.body, mx);
}

в IE таблица вроди как существует, но её почему то не видно

hogart 08.05.2008 20:05

scuter,
в ИЕ не работает изменение таблиц через innerHTML. используйте addRow и т.д.

scuter 10.05.2008 16:01

так там не innerHTML, а createElement используется

hogart 10.05.2008 18:45

scuter, пардон, виноват. Тем не менее, поглядите сюда: http://support.microsoft.com/kb/239832, и попробуйте через insertRow и insertCell методы.


Часовой пояс GMT +3, время: 21:06.