2012-11-24 12 views
6

numaralı belgeden yok Sunucu tabanlı DOM manipülasyonunu gerçekleştirmek için JSDom kullanmak istiyorum. Ancak, explcitly querySelector sağlayan rağmen, yaratılan belgelerde tanımsız: Ancakjsdom - document.querySelector etkin, ancak

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) 

İade düzgün jsdom kullanarak document.querySelector çalışması nasıl

undefined 

?

+0

Neden jQuery kullanmıyorsunuz? – NiLL

+1

@NiLL JQuery'nin çok fazla kodu olduğundan ihtiyacım yok ve kodun çalışacağı ortamların çoğunda (yani tüm mevcut tarayıcılarda) querySelector kutusu sağlanıyor. – mikemaccana

cevap

10

Bunun cevabını kendim buldum.

JSDom'un birden çok ek belgeye yönelik desteğinin yanı sıra bir 'varsayılan belgesi' vardır.

Özgün anlayışım, varsayılan belgedeki QuerySelector'ı etkinleştirmenin tüm belgelerde etkinleştirmesini sağlamaktı. Bu yanlıştı.

Oluşturduğum (varsayılan olmayan) belgede QuerySelector'ı etkinleştirmem gerekiyor. Aşağıda

Çalışma kodu:

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) 

Koşu Şimdi fonksiyon var gösterir.

+0

En az 9.2.1'de çalışmıyor: 'TypeError: document.createWindow bir işlev değil. –