2016-07-26 42 views
0

我是新來的nodejs,我知道$是在jQuery中使用,但我正在學習的教程向我展示了以下代碼片段,它困惑我的是'$',

var $ = cheerio.load(res.text); 
    $('#topic_list .topic_title').each(function (idx, element) { 
     var $element = $(element); 
     var href = url.resolve(cnodeUrl, $element.attr('href')); 
     topicUrls.push(href); 
    }); 

任何人都可以嘗試解釋5 $ s在這裏?先謝謝你。

+2

_ [Cheerio實現jQuery核心的一個子集...](https://github.com/cheeriojs/cheerio)_ –

+1

您可以從東西返回功能,然後調用它。調用'doc_fn'會更有意義嗎? – tadman

回答

7

就像你可以有一個名爲a的變量一樣,你可以有一個名爲$或_的變量。在JavaScript的變量名稱搜索谷歌將提供更多的信息,但你的問題的角度,考慮一下:

var a = 1; //creates a variable named a, value is one 
var $ = 1; //creates a variable named $, value is one 

,因爲它是JavaScript的,一個變量也可以按住一個功能:

var a = function(){return 1;} // calling a() will return one 
var $ = function(){return 1;} // $ is a var whose value is a function. 

現在,當你有你打電話非常頻繁,forexample jQuery庫有一個名爲JQuery的(),它包裝元素,幷包含一切功能的功能,是有意義的有它的快捷方式:

function JQuery(){...} //everything that JQuery does 
var $ = JQuery; //now $() is the shorthand for JQuery() 

再次,因爲它是JavaScript中,函數可以返回一個值,或者另一個功能:

var cheerio = { 
    load: function(start){ 
      return function(end){ return start + " " + end } 
    } 
} 

var $ = cheerio.load("hello"); 
$("world"); // will return "hello world" 
$("my friend"); //will return "hello my friend" 

在你的示例代碼,$已被用作cheerio.load的療法返回值的簡寫()函數。所以,$('#topic_list .topic_title')相當於

cheerio.load(res.text)('#topic_list .topic_title') 

意味着cheerio.load(res.text)有望返回以後可以調用的函數。所以從你的示例代碼的第二行開始,$就是這個函數。如果您之前有過JQuery,那麼仍然可以使用JQuery()而不是$()。

$元素只是一個變量名稱,它是$(元素)的結果的視覺線索。你可以很容易地說var froggy=$(element)但$元更具可讀性。

+0

謝謝Reza,現在感覺好多了:) –

1

您不需要與$混淆。這裏的$只是變量,如果你願意,你可以指定任何東西。我們使用$是因爲cheerio類似於jquery,並且很容易理解誰知道jquery。你可以這樣寫

var cheerText = cheerio.load(res.text); 
cheerText('#topic_list .topic_title').each(function (idx, element) { 
    var element = cheerText(element); 
    var href = url.resolve(cnodeUrl, element.attr('href')); 
    topicUrls.push(href); 
});