Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Атрибуты и свойства (https://javascript.ru/forum/misc/12222-atributy-i-svojjstva.html)

TicTac 07.10.2010 15:36

Атрибуты и свойства
 
Здравствуйте!
Почитал про атрибуты и свойства и не могу ни как уловить разницу.

Читал
http://javascript.ru/tutorial/dom/attributes
и
http://xpoint.ru/know-how/JavaScript/Atributyi?8

Не совсем понимаю вот что..

Что такое свойство, а что такое атрибут.

1.
inputTag.setAttribute("type", "abrakadabra");     // присваиваем атрибуту недопустимое значение
alert(inputTag.getAttribute("type"));             // показывает: abrakadabra
alert(inputTag.type);                             // показывает: text


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


-Свойства же отображают текущее состояние тега
свойство это type='submit' вся запись или только 'submit'?


2. Если взять такую запись

type='submit' - это будет и свойством и атрибутом, только это как бы так:
type='submit' -свойство
type='submit' - атрибут

но браузер пытается синхронизировать это дело и выходит type='submit' - это и свойство и атрибут, то есть если изменить одно изменится второе, только почему иногда бывают случаи когда свойство и атрибут имеют разные значения

3. Если рассмотреть такую запись
myAtr='myValue'
тогда это только атрибут, так как свойства четко не могут быть любой пользовательской строкой. Верно?
такого свойства myAtr='myValue' нет?


Я запутался(

Sweet 07.10.2010 15:53

Забудь про это - это на самом деле не важно:) Используй все время свойства - в большинстве случаев это правильнее. А со временем все поймешь.

Octane 07.10.2010 16:52

Браузер синхронизирует только те свойства с атрибутами, которые знает. Для выдуманных пользователем атрибутов тегов не создаются одноименные свойства DOM-объектов, поэтому совсем забыть о getAttribute не получиться.

TicTac 08.10.2010 00:23

Мне кажется я догнал! Что тут не понятного атрибуты тегов и муляж этих атрибутов - свойства полученные при полощи синхронизации браузера. Надеюсь правильно понял :)

Теперь меня долбит вопрос, если создать атрибут появится свойство...
А если добавить свойство - атрибут естественно не появится.?

Цитата:

Используй все время свойства - в большинстве случаев это правильнее.
намек понял почему, спс:) помогло!

Цитата:

Браузер синхронизирует только те свойства с атрибутами, которые знает. Для выдуманных пользователем атрибутов тегов не создаются одноименные свойства DOM-объектов, поэтому совсем забыть о getAttribute не получиться.
спс, помогло!

Илья тоже описал в статье, что-то я протупил
Цитата:

Для "левых" атрибутов браузер ничего не гарантирует

хм, я уже второй раз не могу поставить + в карму Sweet, пишет нужно добавить кому нить отзыв прежде чем снова добавить Sweet. Это баг?

Octane 08.10.2010 00:54

Цитата:

Сообщение от TicTac
если создать атрибут появится свойство...

не появится (кроме IE)
var node = document.createElement("div");
node.setAttribute("test", "O_o");
alert("test" in node);


Цитата:

Сообщение от TicTac
А если добавить свойство - атрибут естественно не появится

да
var node = document.createElement("div");
node.test = 1;
alert(node.hasAttribute("test"));


Повторюсь: если браузеру известно какое-то свойство или атрибут, то при изменении и добавлении, значения возможно синхронизируются:
var node = document.createElement("div");
node.setAttribute("id", "_123");
alert(node.id);

var node = document.createElement("div");
node.id = "_123";
alert(node.getAttribute("id"));


Еще полезно помнить, что node.cloneNode копирует только атрибуты:
var node = document.createElement("div");
node.test = "O_o";

var clone = node.cloneNode(true);
alert(clone.test);

var node = document.createElement("div");
node.setAttribute("test", "O_o");

var clone = node.cloneNode(true);
alert(clone.getAttribute("test"));


Ну и ключевое отличие: атрибут всегда имеет строковое значение, свойство может принимать любое значение.
var node = document.createElement("input");
node.type = "checkbox";
node.setAttribute("checked", "checked");
alert(node.checked);

TicTac 08.10.2010 01:19

Цитата:

Сообщение от Octane
Сообщение от TicTac
если создать атрибут появится свойство...
не появится (кроме IE)

1
var node = document.createElement("div");
2
node.setAttribute("test", "O_o");
3
alert("test" in node);

понятно про левые

спс еще раз! очень полезно четко и понятно:)

Андрей38 15.04.2011 02:35

Я по Квери хочу спросить . Правильная ли такая запись $('*[class=class1]||[id=id2]'). чтоб реалиазовать 'Или Тот, Толи Этот ?' Как это должно быть написанно правильно ?..И какие еще есть похожие арифмерические штучки ?

monolithed 15.04.2011 08:48

Цитата:

Сообщение от Андрей38
$('*[class=class1]||[id=id2]')

нет, тут все написано

Андрей38 19.04.2011 22:22

Цитата:

Сообщение от monolithed (Сообщение 100721)
нет, тут все написано

Спасибо ОГРОМНОЕ :thanks: !А то я не мог никак сообразить какое именно слово втавить для поиска в Гугле
Это то , для чего оно мне нужно
http://www.youtube.com/watch?v=2y83ocW89ls

Андрей38 09.05.2011 23:24

Я не могу сообразить . как выделить сиблингс- элементы которые НЕ имеют какого нибудь атрибута по отношению к ГРУППЕ элементоав ,наделенной одним И ТЕМ ЖЕ классом. В моем случае .как я уже сказал-это класс // hasAttr -есть такое в документации , а наоборот как сделать по типу hasNotClass ? If ($(this). hasAttr('xxx')){$(this).siblings().remove()} чо-то не сработало.. Подскажите пожайлуста,как провернуть такую вещь.


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