изменение типа массива
Хотел сделать функцию которая добавляет элемент на страницу
Выглядит это как-то так:
function create(tag,params,parent){
if(!tag)
return 'tagName is null';
var nevv = document.createElement(tag);
nevv.id = params.id;
return (parent? parent : document.body).appendChild(nevv);
}
create('div',
{
id:'newDiv',
class:'className',
style:{
display:'none',
width:'100px'
}
},
ge('parent')
)
Встретился с проблемой применения параметров(params), писать для каждого из них отдельную команду: nevv.id = params.id? params.id : ''; nevv.class = params.class? params.class : ''; nevv.style.display = params.style.display? params.style.display : ''; nevv.style.width = params.style.width? params.style.width : ''; nevv.style.height = params.style.height? params.style.height : ''; Слишком объёмно и в плане работы, и в плане размера кода, да и работать, я подозреваю, будет не шибко быстро.. Можно ли сделать из ассоциативного массива многомерный и заполнить параметры существующими значениями с помощью цикла? |
function applyParams( obj, params ) {
for( var key in params ) {
if ( typeof params[ key ] === "object" ) {
applyParams( obj[ key ], params[ key ] );
} else {
obj[ key ] = params[ key ];
}
}
}
function create( tag, params, parent ) {
if ( !tag ) {
return 'tagName is null';
}
var nevv = document.createElement( tag );
if ( params && typeof params === "object" ) {
applyParams( nevv, params );
}
return ( parent || document.body ).appendChild( nevv );
}
|
Цитата:
|
Цитата:
params.parent||document.body
params.id||"defId"
params.style || {}
короче говоря, мой способ - то же самое, что и extend у jquery (с нек-и ограничениями) |
melky,
ок тогда объясни почему я не вижу дивака при твоем варианте?
<html>
<head>
</head>
<body>
<script>
var defParams = {
parent: document.body,
id: "",
className: "default_class_for_created_elements"
};
function create(params){
if (!params.tag) return;
params.prototype = defParams;
var nevv = document.createElement(tag);
nevv.id = params.id;
nevv.className = params.className;
return params.parent.appendChild(nevv);
}
create('div',
{
id:'newDiv',
className:'className',
innerHTML: 'test',
style:{
//display:'none',
width:'100px'
}
}
)
</script>
</body>
</html>
А вот мой вариант:
<html>
<head>
</head>
<body>
<script>
function applyParams( obj, params ) {
for( var key in params ) {
if ( typeof params[ key ] === "object" ) {
applyParams( obj[ key ], params[ key ] );
} else {
obj[ key ] = params[ key ];
}
}
}
function create( tag, params, parent ) {
if ( !tag ) {
return 'tagName is null';
}
var nevv = document.createElement( tag );
if ( params && typeof params === "object" ) {
applyParams( nevv, params );
}
return ( parent || document.body ).appendChild( nevv );
}
create('div',
{
id:'newDiv',
className:'className',
innerHTML: 'test',
style:{
//display:'none',
width:'100px'
}
}
)
</script>
</body>
</html>
|
Цитата:
|
Цитата:
PS. Сделай пожалуйста рабочий пример того чего ты предлагаешь. |
Цитата:
|
Цитата:
var a ='<'+TAG+' '+ param1+'=' +valPar1+' '+ param1+'=' +valPar2+'></'+TAG+'>'; Легко организуется в цикл (Только для скорости не сходу добавляем на страницу, а формируем некую переменную всех текущих добавляемых и только потом всовываем |
Цитата:
|
| Часовой пояс GMT +3, время: 22:22. |