何故そのようなことがしたいのか?というツッコミを受けそうですが、サーバサイドで出力するHTMLを出力直前にいじりたいのです。
例えばHTMLのdata-numアトリビュートに自動的に番号を割り振るというようなことがしたいのです。
html
1<!-- コンバート前 --> 2<html> 3 <body> 4 <p data-num>first</p> 5 <p data-num>second</p> 6 <p data-num>therd</p> 7 </body> 8</html> 9 10<!-- コンバート後 --> 11<html> 12 <body> 13 <p data-num="0">first</p> 14 <p data-num="1">second</p> 15 <p data-num="2">therd</p> 16 </body> 17</html>
javascript
1let html = fs.readFileSync('test.html') 2let status = null 3for(let i=0; status=html.match(/ data-num[ >]/); i++){ 4 let idx = status.index + 9 5 html = `${html.slice(0, idx)}="${i}"${html.slice(idx)}` 6}
これはなんとか動いたのですが、今度はdata-numが存在するタグのHTML文字列を全て配列で取得したくなってしましました。つまり以下のような結果が欲しいのです。
json
1["<p data-num=\"0\">first</p>", "<p data-num=\"1\">second</p>", "<p data-num=\"2\">therd</p>"]
しかしこれは、正規表現などでは簡単に取得できないと思いました。
サーバサイドでもjQueryを使えるなら簡単にできそうなのですが、さすがにクライアントで動くライブラリをサーバサイドで使うのは無理がありますし、何かいいモジュールがないかと探しているのですが、なかなか見つかりません。
jsdomというライブラリがもしかしたら自分がやりたいことを叶えてくれるかもしれないと思ったのですが、サーバサイドで他のサイトのHTMLを取ってきて操作するためのライブラリのようで、何か大げさな気がしました。
ただinnerHTMLが行えればいいだけなのですが、何かアドバイスいただけないでしょうか
回答3件
あなたの回答
tips
プレビュー