deprecateという感じですがNode環境ででjQueryを使えるようにしておく必要があり
以下のようにしましたが、jQueryのメソッドチェーンがfind()以降、
つなげることができません。jQueryのオブジェクトが返ってきていないようです
JavaScript
1/* 2 input.html の内容の一部を変更して output.html に書き込むというものです 3*/ 4 5var $ = require('jquery'); 6var fs = require('fs'); 7var jsdom = require('jsdom'); 8const { JSDOM } = jsdom; 9 10fs.readFile(__dirname + '/input.html', function (err, data) { 11 if (err) throw err; 12 let body = data.toString(); 13 const dom = new JSDOM(body); 14 15 // Error(jQuery) 16 let newBody = $(dom.window.window).find('h1')[0].text('Hello World').parents('html')[0].outerHTML; 17 18 fs.writeFile(__dirname + '/output.html', newBody, 'utf-8', function(){ 19 if (err) throw err; 20 console.log('done'); 21 }); 22});
$(dom.window.window).find('h1')まではブレークさせみてみると
'Array(1) [HTMLHeadingElement]'となってて
DOMそのものは取得できているようなのですが・・・
エラー発生箇所を以下のように書き換えると問題なく完了します
JavaScript
1 // Done well(DOM) 2 dom.window.document.querySelector("h1").innerHTML = 'Hello World'; 3 const newBody = dom.window.document.querySelector('html').outerHTML;
##(補足)
上記コード内の'$(dom.window.window)'の部分ですが jsdom の仕様を
見ていたりして思いついてやってます。こうしないと、そもそもjQueryが
「jQuery requires a window with a document」のエラーになります
もちろんこのコードに限ったことではないのですが
普通にjQueryが使用できる状況を得るにはどうすればいいでしょうか?
##(環境)
OSX HighSierra v.10.13.6
VS CODE v.1.27.2
Node v.8.6.0
jsdom v.12.0.0
jquery v.3.3.1
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/16 04:38