2011-11-17 71 views
2

我想了解为什么有些东西在jQuery中起作用。 当我想申请一个jQuery的扩展名,例如datatables,我运行命令:为什么在jQuery中工作?

$("#some_id").datatables(.. parameters ..); 

我不知道为什么这个作品,明显的DOM元素没有一个方法datatables()提前。

谢谢!

+0

你可能在你的代码中包含了dataTable插件... :) – Vivek

+2

你应该做一些阅读:[类型:jQuery](http://api.jquery.com/Types/#jQuery) –

回答

4

原因是因为您没有在DOM元素上进行此调用 - 您正在对jQuery对象进行调用,该对象将信息存储在它应该影响的DOM对象上。

其原因.datatables()可用的是,一些插件(可能DataTables)使其在类似这样的方式访问:

jQuery.fn.my_foo_func = function(){ 
    console.log(jQuery(this)); 
}; 

如果应用上面,你就可以做这样的事情:

$("#some_id").my_foo_func(); 

它将传递给控制台您调用它的jQuery对象。

是否足够清楚?

+0

我只是写了非常相似的答案:)只是一个更有用的链接 - 了解jQuery插件的一个很好的起点:http://docs.jquery.com/Plugins/Authoring。 – WTK

+0

@WTK:谢谢。事实上,这对于如何编写jQuery插件是有帮助和更详细的描述。 – Tadeck

5

$("#some_id")不返回HTML DOM元素,它返回包装它的JQuery对象。

这个JQuery对象确实有datatables方法。

+0

OP说:“ _我不知道为什么**这个作品** _“。你没有回答这个问题。 – Tadeck

+1

@Tadeck:从问题(显然DOM元素没有方法...)。所以这解释它恕我直言。 – PeeHaa

+1

@PeeHaa:也许你是对的,但我没有看到“DOM元素没有方法...”和“它不是DOM元素”和“JQuery对象没有这种方法”之间的联系答案。也许关于这个方法出现的细节以及它为什么起作用,即使jQuery和DOM元素都没有这个方法? – Tadeck

0

一旦你调用$("#some_id")你不再有一个DOM对象,而是一个jQuery对象。 DOM对象可用$("#some_id")[0]到达。