Я использую jsdom с jquery, и он работает нормально. Тем не менее, я пытаюсь немного модифицировать свой код, поэтому я не повторяюсь сам, поэтому я сделал основную функцию из некоторого кода jsdom, который принимает некоторые html (DOM), улучшает его с помощью jquery и выплевывает обратно , Однако я не могу вернуть свой результат и, таким образом, назначить его вызову var. Я, вероятно, не вернусь в нужное место, но я просто не вижу очевидного, если так. Может немного помочь.Как вернуть значение из простой функции jsdom?
Вот код:
function tweakIt(html_in){
var jsdom = require('jsdom');
jsdom.env({
html: html_in,
scripts: [
'../public/javascripts/jquery-1.7.1.min.js',
],
done: function(errors, window) {
var $ = window.$;
// do some jquery magic and manipulate the dom
$('body').append('<div>foo</div>');
console.log('Freshly Manipulated HTML: '+ $('body').html()); // it logs perfectly
return $('body').html(); // this isn't returned to where I called tweakIt() from, why not?
}
});
}
var oldhtml = '<html><body><div>some text</div></body></html>';
var newhtml = tweakIt(oldhtml); // never gets set because nothing gets returned, why?
EDIT:
Это действительно проблема асинхронной, так вот как это должно быть сделано с помощью обратного вызова вместо возврата:
function tweakIt(html_in, callback){
var jsdom = require('jsdom');
jsdom.env({
html: html_in,
scripts: [
'../public/javascripts/jquery-1.7.1.min.js',
],
done: function(errors, window) {
var $ = window.$;
// do some jquery magic and manipulate the dom
$('body').append('<div>foo</div>');
console.log('Freshly Manipulated HTML: '+ $('body').html()); // it logs perfectly
callback($('body').html()); // instead of a return, pass the results to the callback
}
});
}
var oldhtml = '<html><body><div>some text</div></body></html>';
var newhtml = tweakIt(oldhtml, function(newstuff){
console.log(newstuff); // woohoo! it works!
});
нормально, но как я могу отправить newHtml обратного вызова от 'сделано:'? – k00k
Ничего, я понял. Я отредактирую свой OP, чтобы показать, как это должно быть сделано. Благодаря! – k00k
Предполагая, что вы назвали свой второй параметр в функции tweakIt 'callback', а вместо вашего оператора return в выполненной функции вы сделали бы что-то вроде этого:' callback ($ ('body'). Html()) ' –