HTMLRewriter
html-rewriter-wasm
stream処理前提なのだが、書き方を工夫すれば色々書ける
tagの中身の処理は、apiが提供されてない
streamなので
自分でtxtを保持してよしなにやる
element自体を変えるのではなく、同じelementをafterで挿入すればいい
code:js
let txt = "";
rewriter.on("p", {
text(text) {
txt += text.text;
},
element(element) {
txt = "";
const tag = element.tagName;
element.remove();
element.onEndTag((end) => {
const inner = replaceSomething(txt)
const content = <${tag}>${inner}</${tag}>;
end.after(content, { html: true });
});
},
})
pタグが入れ子だと(それがvalidかも知らんが)破綻しそうなので、配列にしたほうがいいか
他にも、複数の要件がselectorで被る場合、同じrewriter.onに書いてるとなんか難しい場合がある
rewriterを作成して書き込む事自体を複数回やって、前処理、後処理的なレイヤに分けると良い感じになる
streamの性質上、html to textする際に、元のhtmlがminifyされてないと、インデントが残ったりする
事前にminifyしておくとよい