Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   setAttribute() (https://javascript.ru/forum/events/1318-setattribute.html)

Systemnik 17.06.2008 06:34

setAttribute()
 
Вообщем пишу скрипт снега уже многое сделал и тут спросил одно человека советы по коду.
Вообщем он сказал что правильнее писать:
document.getElementById("1").style.field = '';
а не:
document.getElementById("1").setAttribute("style", "field: zn;");
как правильнее?

И еще вот например я пишу:
var img = new Image();
как вернее
img.src = '1';
или
img.setAttribute("src", "1");
мое предположение это 1 поскольку это не DOM объект.
а если я напишу:
var img = document.createElement('img');
img.src = '1';
img.setAttribute("src", "1");
??? Мое предположение 2....

tenshi 17.06.2008 15:04

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

2. alert( new Image );

Systemnik 18.06.2008 15:55

Цитата:

2
А 3?
а если я напишу:
var img = document.createElement('img'); 
img.src = '1'; 
img.setAttribute("src", "1");

Цитата:

сериализации.
Не могли бы вы сказать, что это...
Я так понимаю, когда нужно отчистить style полностью?
Цитата:

2. alert( new Image );
HTML Image Element... значит 2??

Андрей Параничев 18.06.2008 16:24

Systemnik,
setAttribute используется еще в случаях, когда вы, например, получаете с сервера атрибуты вашей картинки в виде объекта:
var myObject = {
    width: 100,
    height: 120,
    alt: "Что-то"
}

Но вы, допустим, не знаете какие параметры должны придти с сервера, устанавливаете их сразу все. Для этого вам обязательно придется использовать setAttribute, так как форма объект.свойство тут не поможет (так как свойство неизвестно). Получится примерно следующее:
var img = document.createElement("img");
for(var i in myObject)
{
   img.setAttribute(i, myObject[i]);
}
document.body.appendChild(img);

Kolyaj 18.06.2008 16:28

Цитата:

Сообщение от Андрей Параничев
так как форма объект.свойство тут не поможет (так как свойство неизвестно)

объект[cвойство]

Systemnik 18.06.2008 16:34

Андрей Параничев,
а вы не могли бы ответить именно на мой вопрос.
Что такое серилизация?
Как вернее
var img = new Image();
img.src = '1';
или
img.setAttribute("src", "1");
И тут:
var img = document.createElement('img');
img.src = '1';
или
img.setAttribute("src", "1");

Андрей Параничев 18.06.2008 17:56

Systemnik,
Извините, я сначала ошибочно написал. Сериализация это преставление (запись) объектов в виде, удобном для сохранения/передачи. Таким видом может быть html, xml, JSON, и т.д, но в данном случае рассматривается сериализация в html DOM-объекта.

Вот пример того, для чего может использоваться setAttribute, т.е когда нужно сохранение параметров при сериализации:
// Создадим элемент <span>
var element = document.createElement("SPAN");
// Присвоим ему параметр id через setAttribute()
element.setAttribute('id', '1');
// А параметр id2 - через прямую запись
element.id2 = '2';

// Оба параметра доступны из JavaScript:
alert([element.id, element.id2]);

// Теперь создадим <div> и вставим в него наш <span>
var element2 = document.createElement("DIV");
element2.appendChild(element);

// И посмотрим его html код:
alert(element2.innerHTML); // <span id="1"></span>

// Другими словами, если element2.innerHTML сохранить
// на диск/передать на сервер, то параметр id не запишется,
// в отличии от параметров записанных через setAttribute.


Формулировка ответа немного хромает, просто сейчас самочувствие плохое :)

Systemnik 18.06.2008 18:03

Андрей Параничев,
1) Нет, думаю вам не стоит извинятся ничего страшного ;)
А вообще вот вы написали примеры использования их то я знаю,
а какой вернее?
2) А насчет
var img = new Image();
как же вернее там через setAttribute или через прямую запись?

Андрей Параничев 18.06.2008 18:13

Systemnik,
Тут нет верного, или неверного варианта. Как уже говорили, если вам не обязательно следить, чтобы в html представлении элемента все параметры были установлены наглядно, то используйте прямую запись. Т.е если этот кусок не будет записываться на диск/отправлятся на сервер, то используйте прямую запись. Я подозреваю, что прямая запись быстрее, ведь она не изменяет представления, хотя я могу ошибаться.

Systemnik 18.06.2008 18:30

Андрей Параничев,
Согласен это я понял, но если все же говорить про стандарты кодинга ведь document.write() использовать можно, однако его недолюбливают.
Значит неважно как, ок спасибо!


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