Jump to content
  • 0

108 атрибутов!


bot87
 Share

Question

смотреть в динозавре ие6

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<body>
<input type="text">
<p>one</p>
<p>one</p><p>one</p>
<p>one</p><p>one</p>
<p>one</p><p>one</p>
<p>one</p>

<script language="JavaScript" type="text/javascript">
function aa(){
x=document.getElementsByTagName('input')[0]

alert(x.attributes.length)


}
window.onload=aa()
</script>
</body>
</html>

opera выдает только 1 атрибут а ишак 108!может я где плугонул??

x.attributes[1].value пусто

Edited by bot87
Link to comment
Share on other sites

Recommended Posts

  • 0

Потому что в нормальных браузерах показываются только атрибуты, установленные юзером. А в ИЕ показываются вообще все атрибуты, в том числе и те, которые навешивает на DOM-элемент непосредственно браузер. Лично я считаю, что путь ИЕ правильнее ибо удобно.

Link to comment
Share on other sites

  • 0

Потому что в нормальных браузерах показываются только атрибуты, установленные юзером. А в ИЕ показываются вообще все атрибуты, в том числе и те, которые навешивает на DOM-элемент непосредственно браузер. Лично я считаю, что путь ИЕ правильнее ибо удобно.

пасиб ))нада погуглить про ....атрибуты которые дает браузер

  • Like 1
Link to comment
Share on other sites

  • 0

Ну вот хочется мне посмотреть служебные атрибуты ноды. Что я делаю в FF, лезу в Firebug открываю вкладку DOM и долго нудно ищу. А тут, хобана, всё как на ладони. В общем оно мне в жизни может и не пригодится никогда, но отрадно, что такая возможность имеется.

Link to comment
Share on other sites

  • 0

Ну вот хочется мне посмотреть служебные атрибуты ноды. Что я делаю в FF, лезу в Firebug открываю вкладку DOM и долго нудно ищу. А тут, хобана, всё как на ладони. В общем оно мне в жизни может и не пригодится никогда, но отрадно, что такая возможность имеется.

Создаешь файл debug.js, в нем функцию

function dump( node ) {
for(var i in node) consdole.debug( i + " = " + node[i] );
}

И когда надо, вызываешь.

Не надо путать HTML-атрибуты и DOM-свойства, как это делает IE7- ;)

Митхун и Раджеш, когда писали IE, никак не могли разобраться, чем атрибут от свойства отличается, а нам страдай...

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

Link to comment
Share on other sites

  • 0

А по-моему хорошо их путать. Нода это объект тупо, все атрибуты это не некий отдельный класс данных, а тупо свойства этого объекта. Я не понимаю зачем отделять одно от другого. Мне всегда нравилось больше писать node.id = 'some_id' вместо node.setAttribute('id', 'some_id').

Link to comment
Share on other sites

  • 0

Какие же это тупо свойства? Атрибуты — в разметке, свойства — в DOM-е. Атрибуты могут быть только строками, а свойства могут быть любого типа (хоть объект, как parentNode, или функция, как onclick). Атрибуты — как в коде написано, свойства — как присвоено (или как по умолчанию)...

Другое дело, что в типовых задачах атрибуты (и setAttribute, соотв-но) нафик не нужны, свойств достаточно. Имхо, здесь хорошо расписано...

Link to comment
Share on other sites

  • 0

А по-моему хорошо их путать. Нода это объект тупо, все атрибуты это не некий отдельный класс данных, а тупо свойства этого объекта. Я не понимаю зачем отделять одно от другого. Мне всегда нравилось больше писать node.id = 'some_id' вместо node.setAttribute('id', 'some_id').

Это другой момент. node.id - способ записи DOM Level 0. Установка значения этого свойства имеет действие и на атрибут. Это записано в спеке даже

Но это только для особого списка атрибутов, если ты сделаешь node.myVal = 1, то node.getAttribute("myVal") не будет 1

Да мало ли что у меня в коде написано. Главное что происходит при парсинге HTML.

Не всегда то, что ожидаешь получить... :D

Например есть вот такой забавный баг-фича

Тесткейз

 var a = {};
a['1'] = "1";
a['3'] = "3";
a['2'] = "2";
a['33'] = "33";
a['b'] = "b";
a['a'] = "a";

var st = "";

for ( i in a ) st += i + "\n";

alert(st);

Сравнить Хром с другими браузерами

Edited by s0rr0w
Link to comment
Share on other sites

  • 0

Сорыч, а в чём подвох? Т.е. хром как-то по своему распределяет свойства в объектах? :unsure:

Подвох в понимании сути объекта. Хром его хранит, скорее всего, именно как ассоциативный массив arr['myKey':"myValue"], а Фокс как массив объектов arr[{key:"myKey", value:"myValue"}]

Способ, который используется в Хроме, не запрещен, но про него надо помнить.

Link to comment
Share on other sites

  • 0

Сорыч, а в чём подвох? Т.е. хром как-то по своему распределяет свойства в объектах? :unsure:

Подвох в понимании сути объекта. Хром его хранит, скорее всего, именно как ассоциативный массив arr['myKey':"myValue"], а Фокс как массив объектов arr[{key:"myKey", value:"myValue"}]

Да, но откуда хром знает (ход мыслей его), что вот именно a['2'] должно идти вторым? :unsure:

Link to comment
Share on other sites

  • 0

Да, но откуда хром знает (ход мыслей его), что вот именно a['2'] должно идти вторым? :unsure:

Потому что "2" переводится в 2 и записывается в массив под таким индексом.

Даа, интересненько)

Link to comment
Share on other sites

  • 0

В упор не вижу тут массива :). А в хеше, вроде, ключи имеют полное право храниться в таком порядке, как интерпретатору удобнее (прошу ткнуть мордой в спеку, если неправ)...

Link to comment
Share on other sites

  • 0

Всё логично и правильно, любой порядок верный. В массиве по сути тоже свойства не по порядку могу хранится, другое дело что эти свойства по этому и человек и браузер может определить на сколько это свойство далеко от нуля.

Про атрибуты, вы простите уж, но это бред считать что было бы лучше если бы аттрибуты и свойства были одним и тем же. Не хочу никого обидеть, но здравые люди понимают это. Программисты ИЕ не понимали.

Link to comment
Share on other sites

  • 0

В упор не вижу тут массива :). А в хеше, вроде, ключи имеют полное право храниться в таком порядке, как интерпретатору удобнее (прошу ткнуть мордой в спеку, если неправ)...

Хэш = ассоциативный массив.

Link to comment
Share on other sites

  • 0

Кстати, интересно, что в ИЕ6-7, например, атрибут "type" вообще не считается за атрибут, который висит непосредственно на ноде в разметке.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<body>
<input type="text" />
<p>one</p>
<p>one</p><p>one</p>
<p>one</p><p>one</p>
<p>one</p><p>one</p>
<p>one</p>

<script language="JavaScript" type="text/javascript">

function aa(){
var x=document.getElementsByTagName('input')[0]


var atr = x.attributes;
for(var k=0;k<atr.length;k++){
if(atr[k].specified == true){
alert(atr[k].name)
}
}


}
aa()
</script>
</body>
</html>

Странно, но факт. Интересно, а почему так? И есть ли способ проверить артибуты, которые находяться на ноде? :unsure:

Вот id, например срабатывает, а type - нет(

Link to comment
Share on other sites

  • 0
Хэш = ассоциативный массив.

Формально да, но в JS есть устоявшаяся терминология, по которой массив (Array) и хэш (Object) — разные объекты, и второй вроде бы и не претендует на часть свойств/методов/особенностей первого (такие как length и сохранение порядка элементов). Это ж не PHP, где все массивы по сути одинаковы и ассоциативны... Или я чего-то упустил?

в ИЕ6-7, например, атрибут "type" вообще не считается за атрибут, который висит непосредственно на ноде в разметке

Похоже, это только для дефолтного значения ("text"). Стоит изменить, скажем, на "checkbox" — сразу же отзывается, голубчик. Где-то "дооптимизировались", имхо. А насчет способов проверки на ум приходит разве что парсинг outerHTML не, и это не помогает — боюсь что никак...

P.S. Нет, кое-какой толк от outerHTML есть: совсем левые значения типа "polnykabzdez" через attribute.specified тоже не простукиваются, но в outerHTML прекрасно попадают. Всё страньше и чудесатее!

Кстати, про specified я только сейчас узнал, как-то пользоваться не доводилось :). Насколько же удобнее новые инструменты типа querySelector-ов!

Link to comment
Share on other sites

  • 0

Формально да, но в JS есть устоявшаяся терминология, по которой массив (Array) и хэш (Object) — разные объекты, и второй вроде бы и не претендует на часть свойств/методов/особенностей первого (такие как length и сохранение порядка элементов). Это ж не PHP, где все массивы по сути одинаковы и ассоциативны... Или я чего-то упустил?

Упустил тот момент, что я говорил про способы хранения данных в интерпретаторе.

Насколько же удобнее новые инструменты типа querySelector-ов!

И настолько же бесполезные. Через время пришел к выводу, что jQuery-мышление заразительно и сильно ограничивает людей в способах реализации, а w3c эту костность мышления переносит в спецификации. xpath ничему не научил людей...

Link to comment
Share on other sites

  • 0
Упустил тот момент, что я говорил про способы хранения данных в интерпретаторе

Я лишь хотел сказать, что на нюансы этих способов — те из них, что явно не регламентированы спекой — в любом случае нельзя полагаться. ЕМНИП, с порядком вызовов eventListener-ов та же фигня (есть некая "традиция", но никто не гарантирует, что новейший движок ради быстродействия или еще чего-то ее не поломает)...

настолько же бесполезные

Задачи разные бывают :)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy