powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / className - это атрибут?
10 сообщений из 10, страница 1 из 1
className - это атрибут?
    #34467134
mrJust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здрям!

Кто знает как прицеплять, удолять и читать атрибуты из элементов?
Я думал, setAttribute, но работает только под IE, хотя Opera и FF этод метод определён.

В конкретном случае меня интересует атрибут className,
дергаю его методом getAttribute('className'), получаю null в Opera & FF. Если тоже самое проделать c id, работает везде.
В чем дело?
className - это атрибут или нет?

Вот пример кода:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
<html>
<script languafe="JavaScript">
function myFunc()
{
	var elem = document.getElementById('testElem');
	elem.onclick = function(event){
		
		
		var divResult = document.getElementById('divResult');
		var buf = '';
		
		elem.setAttribute('testAttr', 'aaaaa');
		
		for (i in elem)
			/*if ( elem.getAttribute(i) ) */
			buf += i+': '+elem[i]+'<br>';
		
		divResult.innerHTML += 'id: ' + elem.getAttribute('id')+'<br>'; // returned "testElem"
		divResult.innerHTML += 'className: ' + elem.getAttribute('className')+'<br>'; //returned "null" in ff&Opera
		divResult.innerHTML += buf;
		
	}
}
</script>
<body onLoad = 'myFunc()'>
<input id="testElem" type="text" class="testClass" >
<div id="divResult"></div>
</body>
</html>

Я закомментарил строку авторif ( elem.getAttribute(i) )
Если раcкомментарить, то Опера и ФФ выдает список только из двух элементов: type и id .
...
Рейтинг: 0 / 0
className - это атрибут?
    #34467203
Фотография SkyLight
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в HTML-коде как пишется? Там ведь нет className, а есть просто class.
...
Рейтинг: 0 / 0
className - это атрибут?
    #34467262
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
className это свойство элемента, которое задается атрибутом class.
<input id=i1 class=c1> тоже самое что document.getElementByID("i1").className = "c1"
Атрибут же под названием className не несет смысловой нагрузки.
...
Рейтинг: 0 / 0
className - это атрибут?
    #34467774
mrJust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Значит атрибут и свойство - различные понятия?

Ой, ой, попробовал так:
Код: plaintext
divResult.innerHTML += 'class: ' + elem.getAttribute('class')+'<br>';
заработало в ФФ и Опере, а в ИЕ перестало (((((

Какой смысл в атрибутах, если то же самое есть в свойствах?

попробую сформулировать:
свойство "className" есть в IE, Op, FF.
атрибут "class" - в Op && FF.

Вот здесь и неясно:
как добраться к свойству в Опере и ФФ, т.е. я хочу сказать, есть ли метод доступа к свойствам, аналогичный getAttribute('atrName')?

Дело в том, что названия свойства я могу и незнать, т.е. atrName - это переменная, поэтому вариант document.getElementByID(idName).propertyName не катит.

И вообще, непонятно наличие свойства и атрибута в объекте.
...
Рейтинг: 0 / 0
className - это атрибут?
    #34467896
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrJustКакой смысл в атрибутах, если то же самое есть в свойствах?Потому что сначала были только теги и их атрибуты, а потом появились скрипты и объектная модель документа для них. Почему названия свойств объектов отличаются от названий атрибутов тегов - вопрос к разработчикам стандарта. Кроме того, в тег можно навалить кучу собственных атрибутов, но они будут проигнорированы, потому что в спецификации html их нет. Чтобы добро не пропадало, их стали просто складывать в коллекцию атрибутов.
mrJustзаработало в ФФ и Опере, а в ИЕ перестало (((((Просто ie складывает в эту коллекцию не все атрибуты, имеющие смысл. Правильно для всех броузеров будет elem.className.
mrJustпопробую сформулировать:
свойство "className" есть в IE, Op, FF.
атрибут "class" - в Op && FF.Мимо. И атрибут class и свойство className определены в спецификации html и по идее поддеживаются всеми броузерами. Как поддерживаются - тонкости конкретного броузера.
mrJustДело в том, что названия свойства я могу и незнатьДолжен знать. Каждое свойство отвечает за какой-то конкретный аспект поведения элемента, как можно не знать заранее, что произойдет с его внешним видом при каком-то действии? Или все наоборот происходит - скрипты программируют тебя?))))
...
Рейтинг: 0 / 0
className - это атрибут?
    #34468115
mrJust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, чуть прояснилось.
По поводу атрибутов и свойств - вместо "getAttribute()" попробовал "getAttributeNode()".
Заработало!!! Ньдя, метод "getAttributeNode()" возвращает объект атрибута, а у этого объекта есть поля (имя, значение...). Вот, только теперь неясно зачем нужен метод getAttribute(). т.е. в каких случаях его использовать.

Теперь проблема в следующем:
Если задаю атрибут (методом currentElement.setAttribute(name, value)), к текущему объекту действительно добавляется новая пара - названиеАтр : значениеАтр. Но если менять значениеАтр(в конкретном примере меняю атрибут 'class'), результата никакого не видать! Бут-то я так, для прикола парюсь с домом. Как будто броузер издевается - ну поменял, теперь радуйся, а я все равно сделаю как хочу. Я понимаю, это абсурд и кривые руки, но обидно.

Antonariy mrJustДело в том, что названия свойства я могу и незнатьДолжен знать. Каждое свойство отвечает за какой-то конкретный аспект поведения элемента, как можно не знать заранее, что произойдет с его внешним видом при каком-то действии? Или все наоборот происходит - скрипты программируют тебя?))))

Да, действительно знаю, но я меняю не один атрибут, а несколько (class, title, может что еще), поэтому целесообразно запихать все это в функцию.
Надеюсь, пока не запутал.
В общем, мне нужно сохронить свойство в объект, чтобы потом его восстановить.
...
Рейтинг: 0 / 0
className - это атрибут?
    #34468601
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все понятно. Тебе придется забыть об атрибутах, потому что это отдельная коллекция значений и их названий, просто хранилище. Изменение значения атрибута не приведет к изменению значения свойства, внешний вид элемента не изменится. Если хочешь написать какую-то универсальную процедуру, то тебе придется генерировать скрипт типа
Код: plaintext
var s = "document.getElementByID('" + idName + "')." + propertyName;
, подключать его к документу и исполнять. Пока что другие варианты в голову не приходят.
...
Рейтинг: 0 / 0
className - это атрибут?
    #34468954
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrJustНо если менять значениеАтр(в конкретном примере меняю атрибут 'class'), результата никакого не видать!чтобы видеть изменения меняй свойства, а не атрибуты. Добраться до свойства по имени попробуй так: elem["className"]="zz";
...
Рейтинг: 0 / 0
className - это атрибут?
    #34471605
mrJust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это я зря, т.к. не пашет только в IE mrJustНо если менять значениеАтр(в конкретном примере меняю атрибут 'class'), результата никакого не видать!

Я наконец, таки догнал!
массив атрибутов ('attributes') - в IE массив всех свойств и атрибутов для элемента. В IE изменение элементов в этом массиве (добавление новых атрибутов, изменение существующих) не ведёт к видимому изменению элемента. Т.е. если изменим атрибут (например "слass", а он там есть)в IE - это никак не повлияет на его отображение (насчет внутреннего поведения элемента - не знаю). Таким образом, вообще непонятно наличие такага понятия как атрибут для модели IE.
А вот в Opera и FireFox массив ('attributes') очень кстати. Он содержит только атрибуты (но не свойства) текущего элемента. Атрибут рассматривается как объект(как и в IE), но свойств (полей) у него намного больше чем в IE. И изменение значения атрибута ведёт к изменению отображения элемента на экране.
Таким образом,
В IE нужно менять свойство, а в Opera FF можно и свойство и атрибут.
...
Рейтинг: 0 / 0
className - это атрибут?
    #34471671
mrJust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Совсем забыл. Вот версии броузеров, в которых я проверял:
IE6.0
Opera 9.10
Mozilla FireFox 2.0.0.3

Огромное спасибо за помощь!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / className - это атрибут?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]