按标签名获取元素的简写方式?

4
我不知道它叫什么,但我知道有一种方法可以根据标签获取元素,而不需要使用getElementsByTagName。它返回相同的东西,但更短,并且在我的项目中经常使用标签。我所说的是document.frames[x]document.images[x],但对于其他元素,如document.b[x]document.a[x]也适用。由于document.images<img>标签不同,因此似乎如果有更多它们也会被命名为不同的名称。是否有人知道使用这种方法时它叫什么和/或有接受的标签列表?谢谢。
附言:请不要建议使用jQuery等库。这个项目旨在成为一个学习经验,所以我想使用普通的JavaScript。

2
为什么不创建一个更短的别名来代替 document.getElementsByTagName - Cristian Sanchez
你是从哪里找到这种更简短的方法的?你是想到了 document.getElementByID 吗? - Gordon Seidoh Worley
我知道如何创建一个函数并使其更短,但是正如所述,该项目的目的是帮助我尽可能多地了解JavaScript,而这是我知道存在但不完全理解的内容,也不知道有任何指南,因此我在这里询问是否有人了解。更短的方法不是getElement,而是像我问题中包含的两个示例一样。 - Jack
1
你所说的并不是“常规JavaScript”,而是“浏览器提供给JavaScript运行时的东西”。 - Pointy
3个回答

6
除了其他JavaScript库创建这些简写符号外,我不知道任何内置于语言中的库。将此映射到您自己的简写符号将是微不足道的。
var $ = document.getElementsByTagName;

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

除此之外,文档中没有内置的类数组访问所有标签的方法:

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


虽然我不知道这是可以做到的,这是一个很好的知识点,但我仍然想知道有多少这样的内置替代品存在。我已经知道了两个,正如我在问题中提到的那样。我更想了解这方面的更多信息,而不是其他替代品。 - Jack
实际上,你不能这样做,因为 getElementsByTagName 将在没有正确上下文(document)的情况下被调用。var $ = function () { return document.getElementByTagName.apply(document, arguments); } - Cristian Sanchez
同意,我只是在指出创建这种映射有多么微不足道。 - Eli
让我们都同意使用 $ 作为 getElementById 的标准,好吗? - mplungjan
1
mplungian - 没有所谓的“标准化”。在可能是最常用的JavaScript库中,*$不是getElementById*,它是一个重载的标识符,可以执行许多操作之一,其中之一是返回具有引用匹配提供的选择器的元素的数字属性的对象。它还有许多其他用途和含义。 - RobG

6
如答案中其他地方所提到的,这与 JavaScript 实际上没有任何关系,这些是通过 DOM 属性和方法可访问的,通过DOM 的 JavaScript 语言绑定来实现。
关于如何寻址元素,例如document.frames[x](请注意,这是不正确的,应该是window.frames[x]),以及document.images[x] - 这些都是文档对象/HTML 集合,W3C 标准仅包括images、applets、links、formsanchors
因此,除非我完全看错了地方,从我可以从DOM-1DOM-2 规范中得出的结论,似乎没有一种按标记名称任意寻址元素的方法,就像您记得的那样。 更新 MDC上的HTMLCollection 页面更加易懂,它读取:

以下列出每个项目(及其特定属性)都返回一个 HTMLCollection:文档(图像、小程序、链接、窗体、锚点);表单(元素);地图(区域);表格(行、 tBody);tableSection(行);row(cells)


JavaScript 的核心在于文档对象模型 (DOM)。该语言是 ECMAScript,将其与 DOM 一起使用即为 JavaScript(或 Javascript 或 JavaScript,随意)。 - RobG
@RobG 不,JavaScript的标准版本被命名为ECMAScript,但对于大多数人来说,它们都是JavaScript。说“这完全是关于DOM”的话并不改变这些DOM集合不属于JavaScript语言的事实 - 如果您在不同的环境中使用JS,您可能看不到这些集合。如果您正在使用DOM的其他语言绑定,您仍然可以访问这些命名集合。因此,我认为有理由区分DOM和JavaScript,并说这不是JavaScript。 - no.good.at.coding
@Pointy - JavaScriptв„ўжҳҜеңЁжөҸи§ҲеҷЁдёӯдёҺDOMдәӨдә’зҡ„ECMAScriptгҖӮиҝҷдёӘиҜҚе·Із»ҸжҲҗдёәдёҖдёӘйҖҡз”ЁжңҜиҜӯпјҢжңүеҗ„з§ҚеҪўејҸзҡ„еӨ§еҶҷгҖӮNode.jsе°ҶиҮӘе·ұжҸҸиҝ°дёәвҖңйқўеҗ‘V8 JavaScriptзҡ„дәӢ件й©ұеҠЁI/OвҖқпјҢе…¶дёӯV8жҳҜGoogleзҡ„вҖңејҖжәҗJavaScriptеј•ж“ҺвҖқгҖӮе“ӘйҮҢиҜҙjavascriptвҖңдёҺDOMжІЎжңүд»»дҪ•е…ізі»вҖқпјҹ - RobG
@no.good.at.coding - 是的,对于“这与JavaScript没有任何关系”的评论进行了负面评价。W3C DOM规范是语言中立的,但OP已经将问题标记为“JavaScript”,并表示“我想使用常规JavaScript”。此外,有许多W3C API的扩展被广泛实现,例如DOM 0功能、innerHTML、canvas、XMLHttpRequest等等,因此JavaScript比W3C API更强大。大多数这样的扩展现在都包含在HTML5中,它实际上是一个“按照构建”DOM规范,加上了一些愿望清单。它也不是W3C标准。 - RobG
@RobG 自从我们进行了这个讨论以来已经有一段时间了,但我想指向 这篇 MDC 文档中的页面,试图澄清 JavaScript 和 DOM 之间的混淆。它提出的核心观点(我认为很相关)是:JavaScript 是一种编程语言,可以使您操作 DOM 对象并以编程方式对其进行操作,而 DOM 将提供方法和属性来检索、修改、更新和删除您正在处理的文档的部分内容。 - no.good.at.coding
显示剩余5条评论

2
创建您自己的参考资料,
document.tag = document.getElementsByTagName;

或者一个包装器,
function tag(name) {
    return document.getElementsByTagName(name);
}

我知道的支持按元素名称查询的API只有以下几种:
DOM getElementsByTagName CSS选择器 querySelectorAll XPath evaluate E4X
(仅限Mozilla,还不能与DOM一起使用)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接