2012-11-24 6 views
6

JSDomを使用してサーバー単位のDOM操作を実行したいと考えています。しかし、explcitly querySelectorを有効にするにもかかわらず、それが作成した文書で定義されていません:jsdom - document.querySelectorが有効になっていますが、ドキュメントに存在しません

var jsdom = require('jsdom'); 

// Yep, we've got QuerySelector turned on 
jsdom.defaultDocumentFeatures = { 
    QuerySelector: true 
}; 

var dom = jsdom.defaultLevel; 

var document = jsdom.jsdom("<html><body><h1>Hello StackOverflow</h1></body></html>"), 
window = document.createWindow(); 

しかし:

console.log(document.querySelector) 

戻り

undefined 

どのように私はjsdomを使用して適切にdocument.querySelector作業を行うことができます?

+0

なぜjQueryを使用しないのですか? – NiLL

+1

@NiLL JQueryにはたくさんのコードがあるので、コードが実行されるほとんどの環境(つまり、現在のすべてのブラウザ)でquerySelectorが用意されています。 – mikemaccana

答えて

10

自分自身の答えを見つけました。

JSDomには、「デフォルトドキュメント」と複数の追加ドキュメントのサポートがあります。

私の当初の理解は、デフォルトのドキュメントでQuerySelectorを有効にするとすべてのドキュメントで有効になるということでした。これは間違っていた。

私が作成した(デフォルト以外の)ドキュメントでQuerySelectorを有効にする必要がありました。以下

の作業コード:

var jsdom = require('jsdom'); 

var dom = jsdom.defaultLevel; 

// QuerySelector must be turned on on the specificdocument we're creating 
var document = jsdom.jsdom("<html><body><h1>Hello</h1></body></html>", null, { 
    features: { 
    QuerySelector: true 
    } 
}), 
window = document.createWindow(); 

console.log(document.querySelector) 

を実行するには、今すぐ関数が存在を示しています。

+0

少なくとも '9.2.1'では動作しません:' TypeError:document.createWindowは関数ではありません ' –

関連する問題