扩展 HTMLElement
使用 jQuery 可以执行如下操作: $("div")[5].animate()
在我看来,开发人员在某种程度上扩展了 HTMLElement
使用原型
。
我现在的问题是:他们是怎么做到的?例如,由于 HTMLElement.prototype
在 IE 中不起作用,我想知道是否有跨浏览器方法来原型 HTML 元素。
谢谢!
using jQuery it is possible to do something like this: $("div")[5].animate()
This seems to me like the developers in a way extended the HTMLElement
using prototype
.
My question is now: How did they do this? Since HTMLElement.prototype
is not working in IE for example I wonder if there is a cross browser method to prototype HTML elements.
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你不能在 IE 中扩展这些东西; IE 只是不以这种方式实现 DOM 接口。这就是为什么 Prototype 强制您使用这些附加方法“包装”您想要操作的元素。
You can't extend those things in IE; IE just does not implement the DOM interface that way. That's why Prototype forces you to "wrap" elements that you want to manipulate with those additional methods.
jQuery 工厂函数(
jQuery()
或$()
)不返回 DOM 节点。jQuery 工厂函数返回一个新的 jQuery.init 实例,其行为与数组非常相似。不是扩展任何 DOM 节点的原型,而是简单地将更多函数添加到 jQuery.fn 中。
如果函数链接在 jQuery 选择器上,它通常适用于其中包含的所有元素jQuery.init 实例。
我强烈建议您通读 带注释的 jQuery 源代码,以便您可以准确地了解后面发生的情况-场景。
the jQuery factory function (
jQuery()
or$()
) does not return a DOM node.The jQuery factory function returns a new
jQuery.init
instance which acts very similar to an array. Instead of extending any DOM node's prototype, more functions are simply added tojQuery.fn
If a function is chained on a jQuery selector, it typically applies to all the elements contained within the jQuery.init instance.
I highly recommend reading through the commented jQuery source so that you can see exactly what's going on behind-the-scenes.
请注意
$('#book') !== document.getElementById('book')
。第一个是一个 jQuery 对象,它引用一个 dom 元素并且可以扩展,而第二个实际上是一个 dom 元素。
Note that
$('#book') !== document.getElementById('book')
.The first one is a jQuery object which refers to a dom element and can be extended, while the second one is actually a dom element.