2012-11-24 14 views
6

Vorrei utilizzare JSDom per eseguire alcuni server di manipolazione del DOM-saggio. Tuttavia, nonostante explcitly consentendo querySelector, non è definito nei documenti creati:jsdom - document.querySelector abilitato, ma non è presente documento

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(); 

Tuttavia:

console.log(document.querySelector) 

Returns

undefined 

Come posso far funzionare correttamente utilizzando document.querySelector jsdom ?

+0

Perché non usi jQuery? – NiLL

+1

@NiLL Perché JQuery ha un sacco di codice non ho bisogno e querySelector è fornito dalla scatola nella maggior parte degli ambienti in cui il codice verrà eseguito (vale a dire, tutti i browser attuali). – mikemaccana

risposta

10

trovato la risposta a questo uno io.

JSDom ha un 'documento predefinito' così come il supporto per più documenti complementari.

mia comprensione originale era che l'attivazione QuerySelector sul documento predefinito consentirebbe su tutti i documenti. Questo non era corretto.

avevo bisogno di abilitare QuerySelector sul documento (non predefinita) stavo creando.

codice di lavoro di seguito:

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(); 

Esecuzione

console.log(document.querySelector) 

Ora mostra la funzione esiste.

+0

Non funziona almeno in '9.2.1':' TypeError: document.createWindow non è una funzione' –

Problemi correlati