Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   setAttribute неясность (https://javascript.ru/forum/events/8426-setattribute-neyasnost.html)

Артем125 24.03.2010 21:55

setAttribute неясность
 
Здравствуйте

Только начал изучать js и потому такой вопрос)

Если мы в js устанавливаем свойство(или атрибут, пока разницы не понимаю) для тега <body>. Должен ли он появиться у тега при формировании страницы или он существует только в самой программе js?

<html>
    <head>
    </head>
    <body id="MyProperty">

<script>
var e = document.getElementById('MyProperty');
e.setAttribute('clai', 'link');
</script>

    </body>
</html>



Спасибо

Kolyaj 24.03.2010 22:01

Цитата:

Сообщение от Артем125
устанавливаем свойство(или атрибут, пока разницы не понимаю)

Устанавливайте всегда свойства.

Цитата:

Сообщение от Артем125
Должен ли он появиться у тега при формировании страницы или он существует только в самой программе js?

А что значит появиться? View source показывает то, что пришло с сервера. Если innerHTML смотреть, то какие-то атрибуты/свойства появляются, какие-то нет.

Артем125 24.03.2010 22:18

Попробовал тот же код сгенерировать на локальном сервере и у тега <body> атрибут так и не добавился к перечню свойств

что требовалось:

до того, как был добавлен код на js, тег body в бокументе имел следующий вид <body id="MyProperty">
после скрипта я думал получить <body id="MyProperty" clai="link">

теоретически, как я понял со слов уважаемого Kolyaj, некоторые свойства добавляться должны, а почему в данном случае нет?

Kolyaj 24.03.2010 22:48

Если вы смотрите исходник страницы, то вы не увидите там никаких следов работы JS, т.к. браузер показывает то, что пришло с сервера. А с сервера у вас пришло без этого атрибута.
А какая собственно разница, добавляется что-то в тег или нет?

Артем125 24.03.2010 22:55

Ну просто я пришел в js из с и php и пытаюсь найти общие закономерности да и разобраться с языком)

И что же получается, что страница в html статична, неизменна(та которая пришла с сервера), а вся работа происходит с объектом типа DOM, который сформирован из структуры пришедшей страницы?

Kolyaj 24.03.2010 23:08

Цитата:

Сообщение от Артем125
Ну просто я пришел в js из с и php и пытаюсь найти общие закономерности да и разобраться с языком)

Не надо искать общие закономерности, они только в синтаксисе, семантика у языков разная.

Цитата:

Сообщение от Артем125
И что же получается, что страница в html статична, неизменна(та которая пришла с сервера), а вся работа происходит с объектом типа DOM, который сформирован из структуры пришедшей страницы?

Типа того. Не со строкой html же работать.

Nekromancer 24.03.2010 23:14

Когда работаете на сервере, вы формируете текст)) а тут вы работаете уже с реальными объектами.. это всё таки разница..
Скачайте firebug и радуйтесь жизни)

Артем125 24.03.2010 23:17

Уже радуюсь)): языку, firebug и вашей помощи))

Большое спасибо!

Nekromancer 24.03.2010 23:29

Да, JavaScript очень хороший язык :)

subzey 24.03.2010 23:57

Цитата:

Сообщение от Артем125
свойство(или атрибут, пока разницы не понимаю)

Это разные вещи. возможно, это поможет Вам в прояснении ситуации. (Хотя, мои разъяснения обычно ясностью-то и не отличаются :)).

Представьте, есть элемент разметки, обособленная часть текста
<body class="index" myAttribute="foo"></body>

C точки зрения разметки это элемент, вещь в себе, которая позволяет бразуеру обращаться с ней как с чем-то законченным и конкретным. И чисто формально у этого элемента есть два аттрибута, class и myAttribute, которые на что-то так когда-то влияют или не влияют.

А теперь нам нужно получить этот элемент в javascript. Для его представления мы используем объект типа Element. Он предоставляет возможности доступа и редактирования аттрибутов элемента, но сам им не является. Хоть он и связан с элементом HTML, он — объект среды javascript. И «ничто объектное ему не чуждо», у него могут быть свойства.

Было бы безумно удобно, если бы поддерживалась автоматически, браузером, связь «свойство объекта — аттрибут элемента». И, более того, это так и есть, но только для тех аттрибутов, которые известны браузеру.

То есть, задав объекту свойство title, мы можем ожидать, что у элемента появится (изменится) аттрибут title. А, вот, аттрибут myAttribute вря-яд ли сгенерирует свойство myElement. И наоборот, задавая объекту свойство myProperty, мы не вправе ждать, что у элемента непременно появится такой параметр.

Обратите на это внимание и не забывайте.


Кстати, о не-тождественности «аттрибут элемента разметки — свойство объекта javascript» может еще говорить то, что аттрибут class представляется в виде свойства .className.

__________

«элемент типа Element» не следует понимать буквально, в js нет классов как таковых.
Но, так или иначе, прототип от функции-конструктора Element есть в цепи прототипов объекта. Везде, кроме IE6. Но это уже совсем другая история.


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