Использование require ('jquery') с jsdom? - PullRequest
1 голос
/ 07 августа 2011

Я могу использовать опцию JSDOM 'scripts', чтобы загрузить jquery для очистки.Однако мне было интересно, возможно ли, а также лучше или хуже, использовать собственный механизм запроса узла, теперь npm включает в себя jquery.

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)

Все отлично работает и показывает обновленный документ.Но в наши дни мы также можем запустить:

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

Что я считаю более точным - я просто не совсем уверен, как использовать jquery и jsdom таким новым способом.В частности, где находится объект окна?

Ответы [ 3 ]

2 голосов
/ 07 августа 2011

Окончательный рабочий код ниже - похоже, что node-jquery имеет предварительно созданный пустой документ в «body», чтобы получить доступ к конечному документу, вы можете просто запустить .html () для него.

var $ = require('jquery')
$('body').append("<div class='testing'>Hello World</div>")
console.log($("body").html())
1 голос
/ 18 августа 2011

Если вам действительно нужно попасть в окно:

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

Используйте с осторожностью, ._ свойства рассматриваются как private

0 голосов
/ 07 августа 2011

Я не думаю, что вы можете сделать это.Вы извлекаете конкретный экземпляр объекта jQuery из объекта JSDOM window, тогда как require 'jquery' захватывает модуль jQuery.Вместо этого вам нужна версия объекта jQuery, специфичная для этого окна JSDOM, что означает выполнение $ = window.jQuery

...