Получить элемент по сокращенному имени тега?

Я не знаю, как это называется, но я знаю, что есть способ получить элементы на основе их тегов без getElementsByTagName. Он возвращает то же самое, но короче, и я часто использую теги в своем проекте. Я говорю о document.frames[x] и document.images[x], но с другими элементами, такими как document.b[x] или document.a[x]. Поскольку document.images не совпадает с тегом <img>, кажется, что если бы их было больше, они бы тоже назывались по-другому. Может ли кто-нибудь узнать, как это называется при использовании этого метода, и/или иметь список принятых тегов? Спасибо.

P.S. Пожалуйста, не предлагайте использовать библиотеку, такую ​​как jQuery. Этот проект предназначен для обучения, поэтому я хочу использовать обычный JavaScript.


person Jack    schedule 24.04.2011    source источник
comment
Почему бы просто не создать более короткий псевдоним document.getElementsByTagName?   -  person Cristian Sanchez    schedule 24.04.2011
comment
Где вы нашли этот более короткий путь? Вы думаете о document.getElementByID?   -  person G Gordon Worley III    schedule 24.04.2011
comment
Я знаю, как сделать функцию и сделать ее короче, но, как уже говорилось, проект должен помочь мне узнать как можно больше о JavaScript, и я знаю, что это существует, но не полностью понимаю, и я не знаю никаких руководств. и поэтому я прошу здесь кого-то, кто может знать об этом. Более короткий путь - это не getElement, это похоже на два примера, включенных в мой вопрос.   -  person Jack    schedule 24.04.2011
comment
То, о чем вы говорите, — это не обычный JavaScript, а то, что браузеры предоставляют среде выполнения JavaScript.   -  person Pointy    schedule 24.04.2011


Ответы (3)


Как упоминалось в других ответах, на самом деле это не имеет ничего общего с JavaScript, это свойства и методы DOM, доступные через привязка языка JavaScript для модели DOM.

Что касается адресации таких элементов, как document.frames[x] (обратите внимание, что это неверно, это должно быть window.frames[x]< /a>) и document.images[x] — это Document Object/HTML Collections, а стандарт W3C включает только images, applets, links, forms и anchors.

Так что, если только я не ищу совершенно не в том месте, насколько я могу судить по файлу DOM-1 и DOM-2, похоже, нет никакого способа произвольной адресации элементов по имени тега, как вы помните.

Обновить

запись MDC на HTMLCollection более понятна; он читает

Ниже перечислены все элементы (и их конкретные свойства), которые возвращают HTMLCollection: Документ (изображения, апплеты, ссылки, формы, привязки); форма (элементы); карта (области); таблица (строки, tBodies); tableSection (строки); ряд (ячейки)

person no.good.at.coding    schedule 24.04.2011
comment
JavaScript — это все о DOM. Язык — ECMAScript, использование его с DOM — это javascript (или Javascript, или JavaScript, что угодно). - person RobG; 24.04.2011
comment
@RobG Нет, стандартизированная версия JavaScript называется ECMAScript, но для большинства людей это все JavaScript. Заявление о том, что все дело в DOM, не меняет того факта, что это коллекции DOM, а не часть языка JavaScript — если вы использовали JS в другой среде, вы могли бы их не увидеть. И если бы вы использовали какую-то другую языковую привязку для DOM, у вас все равно был бы доступ к этим именованным коллекциям. Так что да, я чувствую себя вправе проводить различие между DOM и JavaScript и говорить, что это не JavaScript. - person no.good.at.coding; 24.04.2011
comment
@Pointy — JavaScript™ — это ECMAScript в браузере, взаимодействующем с DOM. Слово стало общим термином с различными формами капитализации. Node.js описывает себя как Evented I/O for V8 JavaScript, где V8 — это движок JavaScript с открытым исходным кодом от Google. Где сказано, что javascript не имеет ничего общего с DOM? - person RobG; 27.04.2011
comment
@ no.good.at.coding - да, голосование против этого не имеет ничего общего с JavaScript. Спецификации W3C DOM не зависят от языка, но OP пометил вопрос JavaScript и сказал, что я хочу использовать обычный JavaScript. Кроме того, существует множество расширений API-интерфейсов W3C, которые широко реализованы, такие как функции DOM 0, innerHTML, canvas, XMLHttpRequest и т. д., поэтому JavaScript — более крупный зверь, чем просто API-интерфейсы W3C. Большинство таких расширений теперь включены в HTML5, который фактически представляет собой готовую спецификацию DOM с добавлением небольшого списка пожеланий. Это также не стандарт W3C. - person RobG; 27.04.2011
comment
@RobG Node.js — это среда на стороне сервера, которая, если вы не добавите одну из различных виртуальных библиотек DOM, не имеет ничего общего с манипулированием DOM. - person Pointy; 27.04.2011
comment
@RobG Прошло много времени с тех пор, как мы обсуждали это, но я хотел указать вам на эту страницу в Документах MDC., который пытается прояснить путаницу между JavaScript и DOM. Основной вывод, который он делает (который я считаю уместным), заключается в следующем: Хотя JavaScript — это язык программирования, который позволит вам работать с объектами DOM и манипулировать ими программно, DOM предоставит вам методы и свойства для извлечения, изменять, обновлять и удалять части документа, над которым вы работаете. - person no.good.at.coding; 29.05.2011
comment
Я пытаюсь подчеркнуть, что доступ к элементам DOM — это, ну, DOM API, а не что-то встроенное в язык JavaScript. Например, PDF API предоставляет свой собственный DOM, который отличается от (X)HTML DOM, к которому можно получить доступ через JavaScript, но который не имеет функций, упомянутых в этом ответе (getElementById(), getElementsByTagName() и т. д.). То, что вы видите, — это привязка языка JavaScript к (X)HTML DOM, предоставляемая браузерами. - person no.good.at.coding; 29.05.2011
comment
no.good.at.coding — +1 за настойчивость. JavaScript™ — это не язык, это реализация ECMAScript в Mozilla. Google V8 — это еще одна реализация ECMAScript. Когда разработчики Node.js называют его JavaScript (я бы назвал это JavaScript, но мнения на этот счет расходятся), они используют его как общий термин для реализации EMCAScript. V8 — это не JavaScript, это V8. - person RobG; 30.05.2011
comment
Ваше различие между JavaScript™ и W3C DOM API прекрасно, но здесь не актуально. OP касался коллекций элементов в DOM, то есть javascript в целом, а не конкретно JavaScript™ или W3C DOM API. Учитывая, что различные реализации javascript (например, ECMAScript в браузере) предлагают нестандартные API, неверно утверждать, что только потому, что вопрос не касается конкретно JavaScript™ и в качестве примера используется W3C DOM API, что речь не идет о javascript. (общий термин для ECMAScript в браузере). - person RobG; 30.05.2011
comment
Я понимаю вашу точку зрения о некоторых вещах - что касается остального, я думаю, мы можем просто согласиться не согласиться :) - person no.good.at.coding; 30.05.2011

Кроме других библиотек JavaScript, создающих эти сокращения, я не знаю ни одной, встроенной в язык. Было бы тривиально сопоставить это с вашим собственным сокращением:

var $ = document.getElementsByTagName;

// you can then use it like so:
$('SPAN').// and so on

Помимо этого, нет встроенного доступа к массивам ко всем тегам в документе:

http://www.javascriptkit.com/jsref/document.shtml

person Eli    schedule 24.04.2011
comment
Хотя я не знал, что это можно сделать, и это неплохое знание, мне все еще любопытно, сколько из этих встроенных альтернатив существует. Два уже существуют, о которых я знаю, как упоминалось в моем вопросе. Я хотел бы получить больше информации об этом, а не об альтернативах. - person Jack; 24.04.2011
comment
На самом деле вы не можете этого сделать, потому что getElementsByTagName будет вызываться без правильного контекста (document). var $ = function () { return document.getElementByTagName.apply(document, arguments); } - person Cristian Sanchez; 24.04.2011
comment
Согласен, я просто указываю, как тривиально было бы создать отображение такого рода. - person Eli; 24.04.2011
comment
И давайте все согласимся стандартизировать $ как getElementById, верно? - person mplungjan; 24.04.2011
comment
mplungian - такой стандартизации нет. Вероятно, в наиболее часто используемой библиотеке javascript $ — это не getElementById, а перегруженный идентификатор, который делает много вещей, одна из которых — возвращать объект с числовыми свойствами, ссылающимися на элементы. соответствующий предоставленному селектору. Он имеет много других применений и, следовательно, значений. - person RobG; 30.05.2011

Создайте свою собственную ссылку,

document.tag = document.getElementsByTagName;

или обертка,

function tag(name) {
    return document.getElementsByTagName(name);
}

Единственные известные мне API, поддерживающие запросы по имени элемента, это:

ДОМ

getElementsByTagName

Селекторы CSS

querySelectorAll

XPath

оценить

Е4Х

(только для Mozilla и пока не работает с DOM)

person Anurag    schedule 24.04.2011