2012-03-13 50 views
5

jQuery方法广泛地说是2种类型;我想核心的方法和工具方法jQuery核心方法vs实用方法

他们称之为$ VS $()

可能有人请提供各类型的例子,突出的差异。 谢谢。

+0

这听起来像一个家庭作业问题。这也听起来不像它属于这里。 – 2012-03-13 13:03:24

+1

其实这不是一个家庭作业的问题....我知道这听起来有点理论,但我只是需要实际的例子来了解不同类型的jQuery方法.. – testndtv 2012-03-13 13:08:33

+2

@Ben Barden:他们现在在学校教jQuery?这听起来好像是个好消息,或者真的是坏消息。 – BoltClock 2012-03-13 13:22:51

回答

14

(跳到TL; DNR在最后,如果你讨厌读书,想总结,然后回去读了整个事情,如果你需要我在说什么澄清)

的本质jQuery

对于初学jQuery的人来说,第一个也是最令人困惑的事情就是jQuery对象是什么,以及它为什么如此工作。 jQuery的体系结构旨在允许开发人员以简单,简洁的语法选择一个语句中的所有相关元素,然后与其交互操作,而不必担心不同浏览器之间的陷阱和注意事项。因此,如果我想将事件处理程序附加到具有特定CSS类的页面上的所有链接,我希望代码看起来像$('a.my-selector').click(function() { /* my handler here */ });,而不是看起来像document.body的所有子元素的怪物,检查它是否是锚点元素与my-selector类,如果是,则以该浏览器专用的方式附加所需的处理程序,并递归调用该元素的子元素。

什么是核心的方法和什么是一个插件的方法

核心和插件方法是一样的,除了核心的方法是在jQuery脚本定义,插件是由您或其他开发人员扩展定义或增强jQuery的核心功能。

核心和插件的方法(我将简单地称它们为从现在开始“方法”)是是jQuery对象的成员函数($jQuery一个别名,以减少打字,所以$()jQuery()是相同的)。这些方法提供了遍历,交互和操作页面元素的方法。如何方法的工作

当你调用$(),创建jQuery核心对象的实例,它具有迄今已定义的所有方法

。此对象中还包含对您选择,引用或创建的所有浏览器HTML元素的引用,具体取决于您提供给$()的参数。因此,在一种方法中,您应始终假定您正在处理一组元素,集合中的元素为零到多个。在大多数情况下,你的方法将是这样开始:

$.fn.myPlugin = function() { 
    // `this` is the jquery object. the next line iterates over each element currently 
    // in the collection and invokes the specified function against it. 
    return this.each(function() { 
    // within _this_ function, `this` is a reference to the current element 
    // here, you can interact with or manipulate the element to whatever 
    // ends required by your plugin. 
    }); 
}; 

注意$.fn只是一个别名为$()对象的prototype。所以,$.prototype$.fn是同义词。 fn/prototype只是JavaScript的一种让您添加或替换对象方法的方法。

方法应该返回什么?

除了例外情况,我会立即说明,方法应该返回结果jQuery对象。结果是什么意思?如果方法遍历或过滤当前元素,它应该返回一个包含这些新元素的jQuery对象。例如:$.fn.filter将采用您选择的原始元素,然后删除与您指定的选择器不匹配的任何元素。例如:

$('a').filter('.my-selector'); // finds all anchor tags on the document, then removes any that don't have the class `my-selector`. 

如果该方法只适用于某些行为,那么它应该只是返回的jQuery目前的元素(在这种情况下,最简单的方法只是返回的this.each的结果,正如我上面证明)。例如:$.fn.hide通过应用CSS display:none使每个选定元素隐藏,因此它可能仅返回this.each。这是非常粗略的看起来像:

$.fn.hide = function() { 
    return this.each(function() { 
     $(this).css({'display':'none'}); 
    }); 
} 

现在,例外。你可能有一个方法从集合中的元素中返回一个值。在这种情况下,不是可以返回一个jQuery对象,而是值。例如,$.fn.html将所有选定元素的HTML内容作为一个字符串返回。所以,你可能会问,“好的,但为什么还要为不返回值的方法返回另一个jQuery对象?”。您可以这样做,以便开发人员可以在一次调用中将功能链接起来回到.my-selector的例子,假设您不仅要应用点击处理程序,还要使文本变为粗体。

你可以这样说:

var myLinks = $('a.my-selector'); 

myLinks.click(function() { /* handle click */ }); 
myLinks.css({'font-weight':'bold'}); 

但是,这是相当冗长,在JavaScript中,every line counts against your page weight。由于所有这些方法返回一个jQuery对象,你可以链一个声明中呼吁:

$('a.my-selector').click(function() { /* handle click */ }).css({'font-weight':'bold'}); 

简洁得多,对不对?

效用函数

效用函数是包裹经常使用的功能静态或共享的功能。它们如上所述略微超出正常的jQuery模式,因为它们仅用于封装一些有用且可重用的逻辑。他们可以接受任何需要的参数,并返回任何想要的结果。例如,$.isArray这样使用:

var myArray = []; 

alert($.isArray(myArray)); // displays true 

它被定义大致是这样的:

$.isArray = function(o) { 
// check if o is array and return true or false 
}; 

现在,你可以很容易地刚做这个“老派”的定义JavaScript的方式它是这样的:

function isArray(o) { 
    // check if o is array and return true or false 
} 

此外,你可能会问的优点是其连接到$什么。其原因是为了防止覆盖开发人员,其他脚本甚至其他版本的jQuery定义的同名函数(如果您真的需要,可以在页面中包含jQuery的多个版本,但那是另一个故事)。

TL; DNR

$()指的是jQuery对象的一个​​实例,$.fn允许您添加或更换的jQuery对象的一个​​方法,并$.yourFunctionNameHere让你定义一个“静态”或“共享”效用函数封装有用的功能,否则不会遵循jQuery实例模式。

+0

Thx很多...什么是返回类型中的差异?还有$是什么意思,$()是什么意思? – testndtv 2012-03-13 16:43:21

+0

我重写了我的答案,希望澄清事情。 – HackedByChinese 2012-03-14 01:19:46

+1

心灵吹拂的解释...如果我可以,我会给这1000票... – testndtv 2012-03-14 12:07:55

0

我不知道如果核心 VS 实用是对比两种方法不对,但我会用它运行。

通常,核心方法对选定的jQuery对象进行操作。

// Loop through selected jQuery objects, operating on each 
$('li').each(function(index) { 
    alert(index + ': ' + $(this).text()); 
}); 

实用方法做直接操作所选择的jQuery对象;而是简单地向开发者提供某种形式的功能或实用程序。它与任何其他JavaScript函数类似。 $允许它有一个jQuery所熟悉的“伪名字空间”。

// Loop through an array of numbers 
$.each([52, 97], function(index, value) { 
    alert(index + ': ' + value); 
}); 

由于@cleric指出,这chapterjQuery Fundamentals解释了它的更多细节。