2011-08-06 5 views
1

Je peux utiliser l'option 'scripts' de JSDOM pour charger jquery pour grattage. Cependant, je me demandais si c'était possible, et aussi meilleur ou pire, d'utiliser le propre mécanisme du nœud, maintenant npm inclut jquery.Utiliser require ('jquery') avec jsdom?

jsdom = require 'jsdom' 

config = 
    html: "<html><body></body></html>" 
    scripts: ['http://code.jquery.com/jquery-1.5.min.js'] 

jsdom.env config, (err, window) -> 
    $ = window.jQuery; 
    $('body').append("<div class='testing'>Hello World</div>") 
    console.log(window.document.innerHTML) 

Tout fonctionne correctement et affiche le document mis à jour. Mais ces jours-ci, nous pouvons également exécuter:

$ = require 'jquery' 
$('body').append("<div class='testing'>Hello World</div>") 

Ce que je trouve plus propre - Je ne suis pas tout à fait sûr de savoir comment utiliser jquery et jsdom de cette manière plus récente. Plus précisément, où se trouve l'objet window?

Répondre

0

Je ne pense pas que vous pouvez le faire. Vous saisissez une instance spécifique de l'objet jQuery hors de l'objet JSDOM window, tandis que require 'jquery' prend le module jQuery. Vous avez besoin d'une version de l'objet jQuery spécifique à cette fenêtre JSDOM, ce qui signifie faire $ = window.jQuery

+0

Merci. Mais je crois que JQuery inclut jsdo, à en juger par le [announcemnet] (http://groups.google.com/group/nodejs/browse_thread/thread/e02619ec7d208d28). J'ai étendu la réponse pour montrer que modifier le DOM en utilisant JQ fonctionne (ou du moins n'échoue pas). Je ne suis pas sûr où je peux accéder à l'objet fenêtre une fois que j'ai fini de modifier le document. – mikemaccana

2

Code de travail final ci-dessous - il semble que node-jquery a un document vide pré-compilé à 'body', pour accéder le document final, vous pouvez simplement lancer .html() dessus.

var $ = require('jquery') 
$('body').append("<div class='testing'>Hello World</div>") 
console.log($("body").html()) 
1

Si vous avez vraiment besoin d'obtenir à la fenêtre:

var jquery = require('jquery'); 
var ctx = jquery('<p>this is some markup</p>'); 
console.log(ctx[0].ownerDocument._parentWindow); 

Utiliser avec prudence, ._ propriétés sont considérées comme privées

Questions connexes