Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: getElementsByName("name") в IE
 
 автор: Vladisimus   (09.11.2011 в 12:49)   письмо автору
 
 

<p name='name'>ass</p>
<p name='name'>asd</p>
<script type="text/javascript">
var name = document.getElementsByName("name");
alert(name.childNodes.length);
</script>

IE выдает ошибку...почему ?

  Ответить  
 
 автор: cheops   (09.11.2011 в 14:08)   письмо автору
 
   для: Vladisimus   (09.11.2011 в 12:49)
 

А атрибут name разве допускается в тэге p? Может лучше воспользоваться class?

  Ответить  
 
 автор: АЯС   (09.11.2011 в 15:45)   письмо автору
 
   для: cheops   (09.11.2011 в 14:08)
 

Атрибут name появился в браузерах раньше атрибута id и применяется он абсолютно к любым тегам.

А вот советовать использовать атрибут class в качестве идентификатора для тега - это очень плохой тон. class - он для определения стилей задуман.

  Ответить  
 
 автор: cheops   (09.11.2011 в 16:11)   письмо автору
 
   для: АЯС   (09.11.2011 в 15:45)
 

Спорно... класс задуман для задания класса тэгов, а уж что с ними потом делать - обходить в цикле или стили накладывать - это проблема программного конкретного приложения. Я заметил, что два тэга имеют одно и то же имя, вот это очень плохой тон. Поэтому и предложил class.

  Ответить  
 
 автор: АЯС   (09.11.2011 в 16:46)   письмо автору
 
   для: cheops   (09.11.2011 в 16:11)
 

>"два тэга имеют одно и то же имя, вот это очень плохой тон"

Никак нет.
Атрибут name, например, может использоваться для формирования группы радиокнопок. Именно НАДО тогда двум и более радиокнопкам назначать одинаковые имена.

Требовать уникальности можно (и нужно) только для атрибута id.

Именно поэтому в DOM:
-- есть метод getElementById - который выдает один-единственный объект с уникальным id

-- и есть метод getElementsByName - который выдает коллекцию объектов, имеющих одинаковые name.

  Ответить  
 
 автор: АЯС   (09.11.2011 в 15:42)   письмо автору
 
   для: Vladisimus   (09.11.2011 в 12:49)
 

http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=83177#post494834


А кроме name вы никаких других английских слов не знаете? :-)
var name = document.getElementsByName("name") [0]; 

К любой глобальной переменной, определённой как var peremennaya, можно обратиться через свойство объекта window, а именно как window.peremennaya

После вашего "удивительного" кода имя текущего окна станет ОБЪЕКТОМ: window.name == тег <p> с атрибутом name, равным name, а должно быть - строкой символов.

  Ответить  
 
 автор: Vladisimus   (09.11.2011 в 21:11)   письмо автору
 
   для: АЯС   (09.11.2011 в 15:42)
 

var name = document.getElementsByName("name") [0]; 

или так
var name = document.getElementsByName("name"); 

alert(typeof name[0]);

- это правильно в нормальных браузерах типа FF, в IE не работает
в IE
var name = document.getElementsByName("name"); 
- работает, но не так


следуя логике стандартов и первой строке
alert(typeof name[0])
== object, , т.е. нужный нам тег <p> и его тип, а в IE не получается выбирать элементы из списка в значении переменной name, хотя сам тип данных name == object, а тип name[0] = undefined;

  Ответить  
 
 автор: АЯС   (10.11.2011 в 00:04)   письмо автору
 
   для: Vladisimus   (09.11.2011 в 21:11)
 

Повторяю для тех, кто в бронетранспортёре.

1. У объекта window по умолчанию существует несколько свойств (и методов).

2. Каждое из этих свойств (методов) имеет какое-то своё имя. Например, window.top, winow.name, window.alert (), window.setTimeout ()...

3. Любое (подчёркиваю - ЛЮБОЕ) из этих свойств (методов) можно использовать БЕЗ указания объекта window и всё будет прекрасно работать. Например, можно написать alert ('Hello!') (безо всякого window с точкой впереди) и всплывёт окошко с надписью Hello! Можно, не ссылаясь на объект window, запросить имя этого самого window, т. е. написать alert (name) и броузер выведет имя текущего окна.

4. Умные люди эту возможность как раз и используют (для сокращения записи кода).

5. Однако, кроме умных людей, имеются в огромном количестве ещё и ДРУГИЕ люди. Это как раз те, кто с упорством, достойным иного применения, пытаются переназначить существующие имена свойств (методов) объекта window. Этим "другим" людям почему-то обязательно надо иметь глобальную переменную именно под именем top (см. здесь). Или - под именем name...
В результате возникают программные конфликты.

[поправлено модератором]

  Ответить  
 
 автор: Vladisimus   (10.11.2011 в 15:01)   письмо автору
 
   для: АЯС   (10.11.2011 в 00:04)
 

Уважаемый АЯС вас никто не оскорблял пока ещё, спасибо за комментарий, да действительно name это имя окна...суть не в том

Метод document.getElementsByName не будет работать с остальными элементами типа div,p и т.п.

Он работает только с теми элементами, для которых в спецификации явно предусмотрен атрибут name: это form, input, a, select, textarea и ряд других


инф. с сайта http://javascript.ru/tutorial/dom/search

хотя из практике аттрибут
name
очень хорошо работает в FF к DIV и P, в других браузерах не проверял

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования