2012-11-24 12 views
6

Ich möchte JSDom verwenden, um einige server-weise DOM-Manipulation durchzuführen. Doch trotz explcitly ermöglicht querySelector ist es undefiniert in den Dokumenten erstellt:jsdom - document.querySelector aktiviert, aber fehlt in Dokument

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

jedoch:

console.log(document.querySelector) 

Returns

undefined 

Wie kann ich document.querySelector Arbeit richtig mit jsdom machen ?

+0

Warum verwenden Sie jQuery nicht? – NiLL

+1

@NiLL Da JQuery viel Code enthält, den ich nicht benötige, ist querySelector in den meisten Umgebungen, in denen der Code ausgeführt wird (dh alle aktuellen Browser), standardmäßig vorhanden. – mikemaccana

Antwort

10

Ich habe die Antwort selbst gefunden.

JSDom hat ein 'Standarddokument' sowie Unterstützung für mehrere zusätzliche Dokumente.

Mein ursprüngliches Verständnis war, dass das Aktivieren von QuerySelector auf dem Standarddokument es für alle Dokumente aktivieren würde. Das war falsch.

Ich musste QuerySelector für das (nicht standardmäßige) Dokument aktivieren, das ich erstellte.

Arbeits Code unten:

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

Lauf

console.log(document.querySelector) 

Jetzt zeigt die Funktion existiert.

+0

Funktioniert nicht mindestens in '9.2.1':' TypeError: document.createWindow ist keine Funktion' –