封裝 HtmlRewriter API
將 CloudFlare Worker 的 HtmlRewriter 封裝成類似 jQuery 的 DOM 操作
DOMHelper
原始碼(貼在 Worker 最上方)
1 | class ElementWrapper { |
簡介
DOMHelper 是一個基於 Cloudflare Worker HTMLRewriter API 的封裝工具,提供簡單直觀的 DOM 操作介面。主要用於在 Worker 環境中修改 HTML 內容。
特點
- 類 jQuery 的鏈式操作
- 支援非同步讀取操作
- 支援 HTML 內容修改
- 支援 CSS 選擇器
選擇器支援
支援標準 CSS 選擇器語法:
- ID 選擇器:
#id
- 類別選擇器:
.class
- 標籤選擇器:
div
- 屬性選擇器:
[attr="value"]
- 複合選擇器:
div.class[attr="value"]
文字操作
.innerText
取得元素的純文字內容
返回:Promise<string>
1 | const text = await dom.querySelector('.Header_YMD').innerText; |
.setInnerText(value)
設定元素的純文字內容
參數:value
(string)
返回:this
1 | dom.querySelector('#dateHeader').setInnerText('2024年3月15日'); |
HTML 操作
.innerHTML
取得元素的 HTML 內容
返回:Promise<string>
1 | const html = await dom.querySelector('#Table').innerHTML; |
.setInnerHTML(value)
設定元素的 HTML 內容
參數:value
(string)
返回:this
1 | dom.querySelector('#northTable').setInnerHTML(` |
屬性操作
.getAttribute(name)
取得元素屬性值
參數:name
(string)
返回:Promise<string>
1 | const theme = await dom.querySelector('body').getAttribute('class'); |
.setAttribute(name, value)
設定元素屬性
參數:name
(string),value
(string)
返回:this
1 | dom.querySelector('body').setAttribute('class', 'dark-theme'); |
元素操作
.remove()
移除元素
返回:this
1 | dom.querySelector('#loading').remove(); |
.before(content, options)
在元素之前插入內容
參數:content
(string),options
(object)
返回:this
1 | dom.querySelector('.container').before('<div class="alert">最新通知</div>', { html: true }); |
.after(content, options)
在元素之後插入內容
參數:content
(string),options
(object)
返回:this
1 | dom.querySelector('.table').after('<div class="footer">資料來源:人事行政總處</div>', { html: true }); |
options
參數
{ html: Boolean }
控制 HTMLRewriter 處理插入內容的方式。如果 html 布林值設為 true,內容會被視為原始 HTML。如果 html 布林值設為 false 或未提供,內容會被視為文字,並套用適當的 HTML 轉義。
實際應用範例
修改部落格網站
1 |
|
注意事項
- 所有讀取操作(innerText, innerHTML, getAttribute)都是非同步的,需要使用 await
- 修改操作(setInnerText, setInnerHTML, setAttribute)是同步的,可以鏈式呼叫
- 必須在最後呼叫 transform() 來應用所有修改
- 僅適用於 Cloudflare Worker 環境
錯誤處理
1 | try { |