Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Два элемента с одним АйДи (https://javascript.ru/forum/misc/25364-dva-ehlementa-s-odnim-ajjdi.html)

Vampir3 02.02.2012 23:27

Два элемента с одним АйДи
 
Заметил в онлайн игрухе на одной странице несколько элементов с одним ID , скажите, как получить innerHTML второго элемента?

если javascript:alert(document.getElementById('Exp').in nerHTML); - мне выдаётся первый элемент

а если javascript:alert(document.getElementById('Exp')[1].innerHTML); - мне не выдаётся ничего( как я понял такое не возможно)

T-sh 02.02.2012 23:35

это не правильно.

один id = один элемент.

получить никак.

Aetae 02.02.2012 23:38

Ну начнём с того, что верстльщик п*здоглазое м*дило.
function getElementsById( id, tag ){
  var els = document.getElementsByTagName( tag || '*' ), i = els.length, result = [];
  while( i-- ) if( els[i].id === id) result.unshift( els[i] );
  return result
}

poorking 02.02.2012 23:39

T-sh,
document.querySelectorAll(id) вернет коллекцию всех элементов в этим id

Цитата:

Сообщение от T-sh
получить никак.

Ну можно выбрать все элементы и пробежать по всем, и смотреть на атрибуты, выбрать нужные элементы и взять любой потом

UPD: да, верстать так нельзя конечно

devote 02.02.2012 23:41

Цитата:

Сообщение от poorking
document.querySelectorAll(id) вернет коллекцию всех элементов в этим id

согласен

trikadin 03.02.2012 02:03

Цитата:

Сообщение от Aetae
Ну начнём с того, что верстльщик п*здоглазое м*дило.

Согласен)

melky 03.02.2012 10:29

Цитата:

Сообщение от Aetae (Сообщение 154946)
Ну начнём с того, что верстльщик п*здоглазое м*дило.

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

"Бло, надо осверстать быстрее. Потом переделаю".

monolithed 03.02.2012 10:30

Цитата:

Сообщение от melky
Он же бабло рубит. А там, где его рубят, заметно ухудшается качество результатов работы.

аргументируй тогда

melky 03.02.2012 10:34

ниже строчка, которая отражает его поведение.

Kolyaj 03.02.2012 10:44

Цитата:

Сообщение от melky
"Бло, надо осверстать быстрее. Потом переделаю".

Да, но множественные id никак не ускоряют процесс вёрстки. Так что он просто мудило.

Хотя есть второй вариант. Он начитался дебильных статей, в которых говорится, что если элемент на странице один, то ставим ему id, если несколько, то class. (То, что авторы таких статей мудилы, мы опустим.)
А потом ВНЕЗАПНО оказалось, что элемент, который всегда был один, внезапно размножился, и его стало два. А т.к. переписывать всегда некогда, то он просто и второму элементу дал такой же id.

devote 03.02.2012 10:47

ну многие в цикл засовывают элементы типа:
foreach( $data as $record ) {
    echo '<a id="blahLink" href="'.$record['url'].'">'.$record['name'].'</a>';
}

На первый взгляд всего один... а там уж все от количества записей в массиве зависит.

Kolyaj 03.02.2012 10:57

Цитата:

Сообщение от devote
На первый взгляд всего один...

Если вдруг непонятна моя мысль:

Цитата:

Сообщение от Kolyaj
если элемент на странице один, то ставим ему id, если несколько, то class.

Это очень ошибочное и пагубное правило. Нужно всегда использовать class. Нет ни одной причины использовать id в CSS.

monolithed 03.02.2012 10:59

Цитата:

Сообщение от melky
ниже строчка, которая отражает его поведение.

Я это понял как: все кто хорошо зарабатывают делают работу заведомо хуже.
Цитата:

Сообщение от Kolyaj
Так что он просто мудило.

Не только он, еще браузеры которые не следуют спецификации и дают возможность так делать

devote 03.02.2012 11:03

Цитата:

Сообщение от Kolyaj
Если вдруг непонятна моя мысль:

яж не противоречие твоим словам написал... я описал то как многие поступают... лично я не юзаю ID вообще... только либо в тестах, либо там где срочно нужно достать элемент из JS.

poorking 03.02.2012 11:03

monolithed,
Но валидатор ругнется на дубли id

devote 03.02.2012 11:05

Цитата:

Сообщение от monolithed
Не только он, еще браузеры которые не следуют спецификации и дают возможность так делать

В спецификации это не запрещено, а лишь предупреждено что данный атрибут должен просто идентифицировать элемент отдельно. Но запрета на то что он обязательно(100%) должен быть уникальным не оговаривается.

monolithed 03.02.2012 12:29

Цитата:

Сообщение от devote
В спецификации это не запрещено

Вобщето запрещено, и валидатор w3c выдаст ошибку!

Цитата:

Сообщение от http://www.w3.org/TR/html4/struct/global.html#h-7.5.2
id = name [CS]
This attribute assigns a name to an element. This name must be unique in a document.

class = cdata-list [CS]
This attribute assigns a class name or set of class names to an element. Any number of elements may be assigned the same class name or names. Multiple class names must be separated by white space characters.


devote 03.02.2012 20:13

Цитата:

Сообщение от monolithed
Вобщето запрещено, и валидатор w3c выдаст ошибку!

про валидатор я вкурсе.

мда, а тут ничего подобного не написано:
http://www.w3.org/TR/CSS2/selector.html#id-selectors

да и вообще мне все равно... Есть запрет, нет запрета... Я ими не пользуюсь... А то что браузер не запрещает... То мне скорее было бы интересно а что браузер должен делать? Ну создал я два элема, с одним ИД.. и как поступить браузер должен?

monolithed 03.02.2012 20:22

В CSS спецификации, тоже самое говорится, хотя и несколько другими словами:

Цитата:

Сообщение от http://www.w3.org/TR/CSS2/selector.html#id-selectors
Document languages may contain attributes that are declared to be of type ID. What makes attributes of type ID special is that no two such attributes can have the same value; whatever the document language, an ID attribute can be used to uniquely identify its element.


devote 03.02.2012 20:27

ну я эти слова немного по другому понял... но не как запрет.

Раед 03.02.2012 20:49

Maxmaxmaximus,
Хм, почему то я всегда думал, что JS находит первый элемент с заданным id


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