注* 這是一個兩年多的“老”項目,可以讓你在NodeJS中使用jQuery的選擇器,像操作前端DOM一樣操作後端的HTML/XML,在去除浏覽器兼容相關代碼後,比JSDOM的操作快8倍. 之前我們曾經提到JSDOM有嚴重的性能問題: Debug調試Node.JS:我們是如何定位內存洩漏和無限循環的
cheerio
快速,靈活,在服務器端使用的jQuery。
簡介
測試你的服務器端HTML:
代碼如下:
安裝
npm install cheerio
功能
❤熟悉的語法:Cheerio實現了jQuery核心的一個子集。Cheerio 從jQuery庫中刪除了所有的DOM不一致和浏覽器兼容支持,呈現其真正華麗的API。
ϟ極快:Cheerio 使用一個非常簡單的,一致的DOM模型。這樣解析,操作和呈現就會帶來令人難以置信的性能提升。初步的端至端的基准測試表明Cheerio比JSDOM快大概8倍。
❁令人難以置信的靈活性:兼容htmlparser2API。Cheerio可以解析幾乎所有的HTML或XML文檔。
JSDOM怎麼樣?
我寫Cheerio,因為我對JSOM越來越感到失望。對於我來說,有我一次又一次的碰到三大症結:
•JSDOM內置的解析器是太過嚴格:JSDOM捆綁的HTML解析器現在不能處理很多流行的網站。
•JSDOM太慢:解析大網站,JSDOM有明顯的延遲。
•JSDOM感覺太沉重:JSDOM的目的是提供一個跟我們在浏覽器中看到的相同的DOM環境(注* 可執行JavaScript)。我從來沒有真的需要這些東西,我只想要一個簡單的,熟悉的方式做HTML操作。
什麼時侯使用JSDOM
Cheerio無法解決你所有的問題。如果我需要在一個類似浏覽器的環境中工作,我仍然會使用JSDOM,特別是當在服務器上想要進行自動化功能測試時。
API
我們將使用的示例HTML代碼:
代碼如下:
加載
首先,你需要在加載HTML。這一步在jQuery是自動完成的,因為jQuery的運行在一個,即時的DOM環境中。我們需要將HTML文檔傳入Cheerio中。
這是首選的方法:
代碼如下:
另外,您還可以將HTML作為字符串參數傳入:
代碼如下:
或者作為根結點
代碼如下:
您也可以通過一個額外的.load()加載您需要修改的默認解析選項:
代碼如下:
這些解析選項是直接從 htmlparser2 借來的,因此可以在htmlparser2使用的任何參數在cheerio也有效。默認的選項是:
代碼如下:
Selectors選擇器
Cheerio的選擇器幾乎與jQuery的完全相同,所以API是非常相似的。
代碼如下:
選擇器按照: 根[root,可選]->上下文[context,可選]->選擇器 的順序選擇元素。選擇器和上下文可以是一個字符串表達式,DOM元素,DOM元素數組。根通常document 是 HTML文檔的根元素。
像jQuery一樣,此選擇方法會從起點遍歷和操縱文檔。它是從文檔中選擇的元素的主要方法,但不像jQuery那樣構建CSSSelect庫(Sizzle 選擇器)。
代碼如下:
Attributes屬性
獲取和修改屬性的方法。
.attr( name, value )
用於獲取和設置屬性的方法。僅獲取匹配的第一個元素的屬性值。如果設置屬性的值設置為null,則刪除該屬性。您也可以像jQuery一樣傳入map和function。
代碼如下:
.data( name, value )
用於獲取和設置數據屬性的方法。獲取或設置僅用於匹配的第一個元素。
代碼如下:
用於獲取和設置input,select和textarea值的方法。注:支持map,function尚未添加。
代碼如下: