Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.02.2013, 11:26
z-z z-z вне форума
Новичок на форуме
Отправить личное сообщение для z-z Посмотреть профиль Найти все сообщения от z-z
 
Регистрация: 17.02.2013
Сообщений: 3

добавить атрибут динамически
Здравствуйте. вобщем есть у меня конструкция, которая явно не правильная... помогите правильно составить, пожалуйста...

так я намудрил потому, что не знаю, какие параметры могуть быть переданы. И давать им значения по умолчанию тоже не получится, так как их куча...

a[1] - объект с параметрами элемента. Соответственно a[1]["style"] - стили, там могут быть width, height, background ну и так далее.

передается это как то типа style : {width : "100px", height : "200px", background : "#32cd32"}

Так вот как мне присвоить элементу все эти стили?

if(a[1]["style"]){ 
	for(i in a[1]["style"]){
		arr.push(i)                              // название стиля
		arr2.push(a[1]["style"][i])              // значение стиля
	}
			
	for(i in arr){
		var styleName = arr[i]
		var styleVal = arr2[i]
		newElem.style.styleName = styleVal
	}
}
Ответить с цитированием
  #2 (permalink)  
Старый 17.02.2013, 11:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

z-z,
на jquery $(a[1]).css(a[1]["style"])
Ответить с цитированием
  #3 (permalink)  
Старый 17.02.2013, 11:58
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

рони, ну ты даешь! Ты тоже jQuery-зомби?
z-z,
for(i in arr){
    var styleName = arr[i]
    var styleVal = arr2[i]
    newElem.style[styleName] = styleVal
}


А к чему эти переливания из пустого в порожнее? Вот так это делается:

var style = a[1]["style"] || {};

for(var property in style){
    newElem.style[property] = style[property];
}

Последний раз редактировалось danik.js, 17.02.2013 в 12:01.
Ответить с цитированием
  #4 (permalink)  
Старый 17.02.2013, 12:03
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

for(i in arr) .. - верный знак того, что человек не умеет делать отладку скрипта. Ибо отслеживать глобальную переменную в отладчике неудобно.
Ответить с цитированием
  #5 (permalink)  
Старый 17.02.2013, 12:06
z-z z-z вне форума
Новичок на форуме
Отправить личное сообщение для z-z Посмотреть профиль Найти все сообщения от z-z
 
Регистрация: 17.02.2013
Сообщений: 3

danik.js,
спасибо. сам до этого дошел сразу после того, как пост создал))

еще вопрос есть.. объект в целом передает так же атрибуты типа названия класса и айди... я проверяю циклом и исключаю style, чтобы потом его отдельно обработать...

но как мне таким же образом какой нибудь обработчик передать?

айди смог прикрепить, а вот обработчик никак не хочет прикрепляться...

например как то типа
newElem("div", {
        id : "newId",
        style : {
            //тут стили
        },
        onclick : "zz()"
})
Ответить с цитированием
  #6 (permalink)  
Старый 17.02.2013, 12:11
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

z-z, не путай атрибуты со свойствами
newEl.onclick = zz - это свойство, желательно делать так.
newEl.setAttribute('onclick', 'zz()') - это атрибут, нежелательно использовать

newElem("div", {
        id : "newId",
        style : {
            //тут стили
        },
        onclick : zz
})


Вот так делай.
Ответить с цитированием
  #7 (permalink)  
Старый 17.02.2013, 12:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

тогда так
for (var i=0; i<arr.length; i++)  {
if (arr[i]["style"]){
var style =  arr[i]["style"];
var newElem =  arr[i];
for(var property in style){
newElem.style[property] = style[property];
}}}

ну и учитывать что background-color = backgroundColor
Ответить с цитированием
  #8 (permalink)  
Старый 17.02.2013, 12:15
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

z-z, посмотри как это сделано в MooTools или jQuery.
Ответить с цитированием
  #9 (permalink)  
Старый 17.02.2013, 12:23
z-z z-z вне форума
Новичок на форуме
Отправить личное сообщение для z-z Посмотреть профиль Найти все сообщения от z-z
 
Регистрация: 17.02.2013
Сообщений: 3

danik.js,
хорошо. допустим строка выглядит так
addElem("div",
		{	
			id : "newId",
			className : "newClass",
			style : 
				{
					width : "100px",
					height: "200px",
					background : "#32cd32"
				},
			onclick : zz
		})


а как мне это внутри функции addElem обработать? я прохожусь по свойствам объекта и есть там есть свойство style, обрабатываю его отдельно... и все получается нормально) а вот как добавить обработчик? не так, чтобы обработчик работал в пределах только этого скрипта, а так, чтобы у элемента был полноценный обработчик... что-то типа
<div id="newId" onclick="zz()"></div>
Ответить с цитированием
  #10 (permalink)  
Старый 17.02.2013, 12:54
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

<body>
<script>
function zz(e) {
    alert('click handler');
}

addElem("div",
{  
    id : "newId",
    className : "newClass",
    textContent: 'Нажми меня',
    style :
        {
            width : "100px",
            height: "200px",
            background : "#32cd32"
        },
    onclick : zz
})

function addElem(tag, properties) {
    var element = document.createElement(tag);
    for (var property in properties) {
        switch (property) {
            case 'style':
                (function(style) {
                    for (var property in style) {
                        element.style[property] = style[property];
                    }
                })(properties[property]);
                break;
            default:
                element[property] = properties[property];
        }
    }
    
    return document.body.appendChild(element);
}
</script>
</body>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как добавить атрибут и к динамически созданному image platedz Элементы интерфейса 2 06.09.2012 22:07
Как добавить атрибут к ссылке hell100 Общие вопросы Javascript 2 20.06.2012 16:51
Как добавить Ext.grid.CheckColumn в Ext.grid.EditorGridPanel динамически? Ex_Soft ExtJS 2 15.09.2010 11:47
как в динамически добавляемый элемент добавить еще несколько? sadonn Элементы интерфейса 1 29.05.2010 12:07
как динамически добавить столбец oxx Элементы интерфейса 4 06.11.2008 17:23