изменение типа массива
Хотел сделать функцию которая добавляет элемент на страницу
Выглядит это как-то так: 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, время: 06:10. |