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()} чо-то не сработало.. Подскажите пожайлуста,как провернуть такую вещь.

monolithed 10.05.2011 23:11

if(!hasAttr('element')) {
      //..
}

Андрей38 12.05.2011 09:57

Цитата:

Сообщение от monolithed (Сообщение 104102)
if(!hasAttr('element')) {
      //..
}

Спасибо вам ,monolithed:thanks:

Андрей38 26.05.2011 11:36

$('td').live( 'click',function(){
подскажите , как это привязать к $(this)
if( !has('img') ){}
...Не работает ...
и вообще, как это ПРАВИЛЬНО пишеться.Я написал еще так ,на пример,
$("td:!has(.class)").hide(800)... не работает и так

:( !

walik 26.05.2011 12:14

Цитата:

Сообщение от Андрей38
$("td:!has(.class)").hide(800)... не работает и так

Попробуйте так:
$('td').not('.class').hide(800);

monolithed 26.05.2011 14:26

Цитата:

Сообщение от Андрей38
if( !has('img') ){}
$("td:!has(.class)").hide(800)... не работает и так

вы с справку хоть заглядывали перед тем как поднимать тему?
if($(this).hasClass('some'))

Андрей38 26.05.2011 16:05

Цитата:

Сообщение от monolithed (Сообщение 106231)
вы с справку хоть заглядывали перед тем как поднимать тему?
if($(this).hasClass('some'))

Cпасибо и на этом :) Я теперь добился такого же результата ,навешав кучу фильтров ,которые и есть в справке .Но хотелось бы изящно сделать , все-таки :write:

Андрей38 21.07.2011 11:13

<script type="text/javascript">
$ (document).ready(function(){
alert($('[src*=folder_name]').attr('src'))
})
</script>
Здравствуйте! ..
Такая конструкция-выведет полный src элемента ,который есть в ДОМ .А как поступают если нужно вывести в ДОМ путь src папки и файлов в ней с хоста по типу Тотал Командера или проводника ? Неужели РНР ? Пожайлуста ,дайте ссылки на интро такого дела
...Я ЕЩЕ ПОДУМАЛ ...наверное надо в эррей сначало загрузить ЛОАД-ивентом,а потом с массива таскать контент ?
Я только немного эксперементировал с массивами и опыта как такового не имею еще в этом деле.Я на правильном пути ?

http://www.znannya.org/?view=js_dom

Андрей38 02.12.2011 21:43

Как удалить в jQ несколько атрибутов СРАЗУ?
<html xmlns="http://www.w3.org/1999/xhtml">
<head><script type="text/javascript" src="jquery-ui-1.8.16.custom.min.js"></script></head>
<div in='e_3 ' on='y_23  '></div>
<body>
$('#my_div').removeAttr('???????')<br>
$('#my_div').removeAttr('e_3 ').removeAttr('ey_3 ') что ТАК работает я и сам вижу :)
<script type="text/javascript">
$(document).ready(function(){
var at=$('#my_div').attr('in')
///$('#my_div').removeAttr('???????')
alert(at)})
</script >
</body>
</html>


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