Ext.get()
和document.getElementById()
有何不同?Ext.get()
可能内部调用document.getElementById()
,它会比document.getElementById()
慢吗?或者使用Ext.get()
是否有任何特定的优势?Ext.get()
和document.getElementById()
有何不同?Ext.get()
可能内部调用document.getElementById()
,它会比document.getElementById()
慢吗?或者使用Ext.get()
是否有任何特定的优势?使用Ext.get相较于getElementById的主要优势是它返回一个Ext.Element实例。该实例不仅包含了getElementById给你的DOM节点引用,还显著地扩展了它——提供了一套方便的方法、事件归一化以及消除跨浏览器差异。
表面上看,getElementById可能比Ext.get稍微快一点,仅因为在达到基本的DOM调用之前少了一个函数。然而,就整体性能而言,检索后你对元素所做的事情可能比检索本身更有影响。拥有Ext.Element封装程序可能会证明非常有益。
您可能也需要查看Ext.fly。这个方法与Ext.get类似,只是它返回给您一个单例的Ext.Element实例。如果您需要存储元素以供以后使用,那么这种方法就没什么用处了,但如果您正在针对唯一的DOM节点进行简单的一次性操作,那么它可能比Ext.get更便宜。
document.getElementById()
是原生的JavaScript,因此比Ext.get()
更快。
那么为什么会有Ext.get()
呢?
document.getElementById()
返回的是一个DOM元素,而Ext.get()
返回的是一个适用于链接目的的Ext
对象。
这也是为什么jQuery有一个$("#elm_id")
的原因。请注意,Ext.get()
也更容易输入 :)
Ext.get()
允许使用字符串ID、现有的HTMLElement或Ext.Element,因此它更加灵活。而document.getElementById()
只接受字符串ID。
话虽如此,如果document.getElementById()
能够满足您的需求,我建议您使用它。它是浏览器本身提供的,并且应该更快一些 - 这样您就不必将自己限制在特定的JavaScript框架中了,少了一次函数调用。
就性能而言,本地JS函数始终会更快。
然而,我并不是说不要使用JS库。它们很棒,因为它们:
最终,或许您甚至会节省时间,因为较少的代码意味着更快的下载速度,在某些情况下甚至可能超过性能。
所以,使用其中之一都是相同的,因为一方面通过性能(“document.getElementById()”)节省时间,另一方面通过减小文件大小和下载时间(“Ext.get()”)节省时间。
您可以同时使用两者,不应该有任何明显的区别。
正如其他人在这里所提到的,使用的方法取决于需要,如果你只想获取一些非 Ext 目的的 dom 元素的引用,你可以使用原生函数,但是如果你打算在 Ext 上下文中对返回的对象执行操作,则 Ext.get 将返回一个 Element 引用,该引用提供了其他方法。
Ext.get 是 Ext.ComponentManager.get 的简写,虽然它是对库函数的调用,可能效率较低,但应注意到在 Ext.Element 上有 ~180 个可用方法,因此如果你需要它们,则包含包装器调用可能是值得的。
如 owlness 所提到的,当你需要在元素上执行单个函数时,例如 Ext.fly("myDiv").hide();
,则使用 Ext.fly(),而当你需要引用元素以备后用时,则使用 Ext.get(),例如 var something = Ext.get("myDiv");
,然后可能是 something.sort(); something.badger(); return something;
我不熟悉Ext库,但使用原生JavaScript只有少数几种方法可以获取特定元素;您可以通过其ID获取它,通过标签名称获取所有元素后搜索它(这是JQuery获取类名元素的方式),或者在HTML5中新添加的按类名获取元素。如果您有创意,还有其他几种方法;)
假设您没有保存本地引用,仅通过ID获取它是最快的。
因此,如果您只是想获取元素而不执行Ext.js通过该函数调用的任何操作,那么原生JavaScript将更快。
document.getElementById() == Ext.get().dom
- Jaider