NodeJS使用jQuery選擇器操作DOM_jquery
註* 這是一個兩年多的「老」項目,可以讓你在NodeJS中使用jQuery的選擇器,像操作前端DOM一樣操作後端的HTML/XML,在去除瀏覽器兼容相關代碼後,比JSDOM的操作快8倍. 之前我們曾經提到JSDOM有嚴重的性能問題: Debug調試Node.JS:我們是如何定位內存洩漏和無限循環的
cheerio
快速,靈活,在伺服器端使用的jQuery。
簡介
測試你的伺服器端HTML:
var cheerio = require('cheerio'),
$ = cheerio.load('
Hello world
');$('h2.title').text('Hello there!');
$('h2').addClass('welcome');
$.html();
//=>
Hello there!
安裝
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程式碼:
- Apple
- Orange
- Pear
載入
首先,你需要在載入HTML。這一步在jQuery是自動完成的,因為jQuery的運行在一個,即時的DOM環境。我們需要將HTML文件傳入Cheerio。
這是首選的方法:
var cheerio = require('cheerio'),
$ = cheerio.load('
- ...
另外,您也可以將HTML作為字串參數傳入:
$ = require('cheerio');
$('ul', '
- ...
或作為根結點
$ = require('cheerio');
$('li', 'ul', '
- ...
您也可以透過一個額外的.load()載入您需要修改的預設解析選項:
$ = cheerio.load('
- ...
normalizeWhitespace: true,
xmlMode: true
});
這些解析選項是直接從 htmlparser2 借來的,因此可以在htmlparser2使用的任何參數在cheerio也有效。預設的選項是:
{
normalizeWhitespace: false,
xmlMode: false,
decodeEntities: true
}
Selectors選擇器
Cheerio的選擇器幾乎與jQuery的完全相同,所以API是非常相似的。
$( selector, [context], [root] )
選擇器依照: 根[root,可選]->上下文[context,可選]->選擇器 的順序選擇元素。選擇器和上下文可以是一個字串表達式,DOM元素,DOM元素數組。根通常document 是 HTML文件的根元素。
像jQuery一樣,此選擇方法會從起點遍歷和操縱文件。它是從文件中選擇的元素的主要方法,但不像jQuery那樣建構CSSSelect庫(Sizzle 選擇器)。
$('.apple', '#fruits').text()
//=> Apple
$('ul .pear').attr('class')
//=> pear
$('li[class=orange]').html()
//=>
Attributes屬性
取得和修改屬性的方法。
.attr( name, value )
用來取得和設定屬性的方法。僅取得符合的第一個元素的屬性值。如果設定屬性的值設定為null,則刪除該屬性。您也可以像jQuery一樣傳入map和function。
$('ul').attr('id')
//=> fruits
$('.apple').attr('id', 'favorite').html()
//=>
.data( name, value )
用於取得和設定資料屬性的方法。獲取或設定僅用於匹配的第一個元素。
$('').data()
//=> { appleColor: 'red' }
$('').data('data-apple-color')
//=> 'red'
var apple = $('.apple').data('kind', 'mac')
apple.data('kind')
//=> 'mac'
.val( [value] )
用來取得和設定input,select和textarea值的方法。註:支援map,function尚未新增。
$('input[type="text"]').val()
//=> input_text
$('input[type="text"]').val('test').html()
//=>
更多API請參考官網

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Node.js 是一種伺服器端 JavaScript 執行時,而 Vue.js 是一個客戶端 JavaScript 框架,用於建立互動式使用者介面。 Node.js 用於伺服器端開發,如後端服務 API 開發和資料處理,而 Vue.js 用於用戶端開發,如單一頁面應用程式和響應式使用者介面。

要連接 MySQL 資料庫,需要遵循以下步驟:安裝 mysql2 驅動程式。使用 mysql2.createConnection() 建立連接對象,其中包含主機位址、連接埠、使用者名稱、密碼和資料庫名稱。使用 connection.query() 執行查詢。最後使用 connection.end() 結束連線。

Node.js 安裝目錄中有兩個與 npm 相關的文件:npm 和 npm.cmd,區別如下:擴展名不同:npm 是可執行文件,npm.cmd 是命令視窗快捷方式。 Windows 使用者:npm.cmd 可以在命令提示字元中使用,npm 只能從命令列執行。相容性:npm.cmd 特定於 Windows 系統,npm 跨平台可用。使用建議:Windows 使用者使用 npm.cmd,其他作業系統使用 npm。

Node.js 中存在以下全域變數:全域物件:global核心模組:process、console、require執行階段環境變數:__dirname、__filename、__line、__column常數:undefined、null、NaN、Infinity、-Infinity

Node.js 和 Java 的主要差異在於設計和特性:事件驅動與執行緒驅動:Node.js 基於事件驅動,Java 基於執行緒驅動。單執行緒與多執行緒:Node.js 使用單執行緒事件循環,Java 使用多執行緒架構。執行時間環境:Node.js 在 V8 JavaScript 引擎上運行,而 Java 在 JVM 上運行。語法:Node.js 使用 JavaScript 語法,而 Java 使用 Java 語法。用途:Node.js 適用於 I/O 密集型任務,而 Java 適用於大型企業應用程式。

Node.js 專案的伺服器部署步驟:準備部署環境:取得伺服器存取權限、安裝 Node.js、設定 Git 儲存庫。建置應用程式:使用 npm run build 產生可部署程式碼和相依性。上傳程式碼到伺服器:透過 Git 或檔案傳輸協定。安裝依賴項:SSH 登入伺服器並使用 npm install 安裝應用程式相依性。啟動應用程式:使用 node index.js 等命令啟動應用程序,或使用 pm2 等進程管理器。設定反向代理(可選):使用 Nginx 或 Apache 等反向代理路由流量到應用程式
