【问题标题】:Is using document.getElementsByTagName() a good idea or bad idea?使用 document.getElementsByTagName() 是个好主意还是坏主意?
【发布时间】:2011-10-21 01:21:52
【问题描述】:

好的,我想知道哪种方式是访问某个标签的首选方式。

是不是更好用..

document.getElementById('myDiv').innerHTML

或者这样..

document.getElementsByTagName('div')[0].innerHTML 
// I use [0] because it is the first div in the body

我的猜测是,我做的方式根本不重要。

【问题讨论】:

    标签: javascript html


    【解决方案1】:

    在这种情况下,getElementById 绝对更好。它要快得多。

    更新

    这是一个关于 JavaScript 选择器函数的测试。 http://jsperf.com/queryselectorall-vs-getelementbyid/6

    关于 JavaScript 选择器函数性能的文章不多。相反,有很多关于 jQuery 选择器性能的文章,例如 thisthis。 jQuery 内部使用原生 JavaScript 选择器函数,所以你可以从这些文章中猜到。

    【讨论】:

    • 这也是我的直觉。你有任何参考吗?我的猜测只是基于我期望它如何工作而不知道它实际上是如何工作的。 :)
    • 好的,现在说我有一个
      元素,说我想保存字符而不是给它一个 id,而是通过标签名称访问它。即使我想保存一些字符并保持文档整洁,您是否仍建议使用 id?
    • 通过标签名获取需要收集所有匹配的元素,然后才能选择第一个实例,而不是通过 ID 获取,只选择一个开始。
    • 我只以 div 为例,我真的想访问页面上唯一的
      元素
    • 如果您只获得一次
      元素,那么花费多长时间并不重要。无论如何,它将在亚毫秒范围内。
    【解决方案2】:

    他们做完全不同的事情。如果您想获取特定元素并且总是需要获取相同的元素,请使用 id。如果您想根据它在 DOM 中的位置来获取特定元素,请使用它在 getElementsByTagName NodeList 中的位置。

    如果你想得到一个特定的元素并且你通过索引得到它,那么你的脚本将会很脆弱——如果你以后改变你的DOM结构,你就需要改变你的代码。如果你想通过它的位置来获取一个元素,那么使用一个 ID 将需要你在你的标记中添加多余的属性。

    另外,重要的是要注意getElementById 返回一个 DOM 节点,而 getElementsByTagName 返回一个 NodeList。在 NodeList 的属性上引用 MDC

    NodeList 是实时的,这意味着它会自动更新自身以与 DOM 树保持同步,而无需再次调用 document.getElementsByTagName。

    因此,如果您需要特定元素,getElementById明显更快。

    【讨论】:

      【解决方案3】:

      出于可读性目的,这取决于您要执行的操作。

      您是否打算获得第一个 div,它恰好恰好被命名为 myDiv?如果是,那么我认为getElementsByTagName 更好,因为它更能表达你想要做的事情。

      或者你的意图是获得myDiv,这只是碰巧成为第一个div?如果是这种情况,请使用getElementById

      除了所有其他考虑因素,请选择表达您意图的因素。

      【讨论】:

      • 我的真正意图是获取页面上的第一个(也是唯一一个)
        元素,我以 div 为例,但你说 tagName 对这种情况会更好,对吧?
      猜你喜欢
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 2014-02-13
      • 2014-02-27
      • 2019-11-11
      • 1970-01-01
      相关资源
      最近更新 更多