innerHTML элемента без атрибутов id или name - PullRequest
0 голосов
/ 17 ноября 2011

Почему следующий код НЕ работает без атрибута id или name, указанного для элемента привязки?

<html>
<body>
<a href="#">First link</a>
<p>innerHTML of the first anchor: 

<script>document.write(document.anchors[0].innerHTML);</script>

</p>
</body>
</html>

Но если я добавлю атрибут id (или name), например:

<a id="first" href="#">First link</a>

Он начинает работать.

Почему атрибут id или name так важен?Я не ссылаюсь на это в моем коде JavaScript.Я не использую "getElementById" или что-то еще, но он все еще хочет, чтобы был указан идентификатор.

PS Я тестировал только в IE7 (не самый лучший браузер, но у меня нет доступа к чему-то лучшему вмомент, и это не может помешать мне учиться:)

ОБНОВЛЕНИЕ:

Благодаря Рейносу, который дал мне идею HTMLCollection в своем ответе, я получил более глубокое пониманиечто происходит здесь, путем поиска в Интернете.

Когда мы используем коллекцию document.anchors, мы на самом деле имеем в виду коллекцию элементов a с атрибутом name, которая создает элемент aведут себя как якорь , а не (только) как ссылка.

Нам не нужно указывать атрибут name, если мы хотим ссылаться на a элементы как ссылки .В этом случае нам просто нужно использовать другой экземпляр объекта HTMLCollection, который document.links.

Таким образом, оригинальный код будет работать без атрибута имени, если мы изменим его на:

document.write(document.links[0].innerHTML);

Какое приятное чувство просветления!:)

Ответы [ 2 ]

1 голос
/ 17 ноября 2011

Почему бы вам не использовать это:

document.getElementsByTagName('a')[0].innerHTML
1 голос
/ 17 ноября 2011

Что говорит:

Атрибут anchors должен возвращать HTMLCollection с корнем в узле Document, фильтр которого соответствует только элементам с атрибутами name.

коллекции document.anchors требуется <a> элементов с атрибутом name.

IE, как известно, имеет ошибки, когда он обрабатывает идентификаторы и имена как "одну и ту же" вещь. Так что это, вероятно, объясняет, почему это работает для <a> элементов с атрибутом id.

В стороне document.write и .innerHTML являются злом.

...