如何从简单的 jsdom 函数返回值?

2024-04-04

我将 jsdom 与 jquery 一起使用,并且运行得很好。然而,我试图将我的代码模块化一点,这样我就不会重复自己,所以我用一些 jsdom 代码创建了一个基本函数,它接受一些 html (DOM),用 jquery 调整它,然后将其吐出来。但是,我无法返回结果,因此无法将其分配给调用变量。我可能没有回到正确的地方,但我只是没有看到明显的情况。需要一点帮助。

这是代码:

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!
});

我认为你不能使用返回值来做到这一点,因为 did: 是一个异步函数。 尝试向您的tweakIt 添加回调,并通过将其作为参数发送来获取新的 html,例如

tweakIt(oldHtml, function(newHtml) {/*use the result here*/})

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从简单的 jsdom 函数返回值? 的相关文章

随机推荐

  • C 删除文件最后 n 个字符

    我需要使用 C 代码从文件中删除最后 n 个字符 起初我尝试使用 b 但它返回了分段错误 我看到类似问题的有趣答案here https stackoverflow com questions 584639 truncate file and
  • 把按钮做成圆形

    我正在尝试在 150 210 的 x y 坐标处制作 JButton 圆 我希望按钮是大小为 40 40 的椭圆形 按钮的背景颜色为红色 它不需要文本 所以我应该得到一个我想要的任何大小的按钮 对吗 我正在使用面板 并将 setLayout
  • jQuery Mobile 通过 ajax 动态创建可折叠集不应用样式[重复]

    这个问题在这里已经有答案了 可能的重复 动态添加可折叠元素 https stackoverflow com questions 4214538 dynamically adding collapsible elements 我正在动态创建一
  • 为什么是“unsigned int ui = {-1};”缩小转换误差?

    标准第 8 5 4 7 解释了什么是缩小转换范围 is 缩小转换是隐式转换 从浮点类型到整数类型 或者 从 long double 到 double 或 float 或者从 double 到 float 除非源是常量 表达式与转换后的实际值
  • DatePicker Blackout日期所有未来和一些过去

    我有一个 WPF 应用程序 需要使用 DatePicker 提供出生日期 除了 134 年前以及之后的所有时间之外 我还想删除明天和其余时间的日期 我尝试使用 BlackoutDates 来完成此任务 因为我们仍然希望允许手动用户输入 但我
  • 使用 Curl 发布 xml 时权限被拒绝?

    我必须将 xml 发布到某个 url 以便由某些 Web 服务使用 我正在使用 Cent OS 5 6 Apache 2 2 3 CentOS 当我使用命令行发布时curl d abc xml http example com它给了我结果
  • 使用 appium 自动登录过程时,密码和用户名被输入在用户名的同一字段中

    尽管测试清晰简单 但我在尝试发送密钥 用户名 密码 时总是面临同样的问题 但密码字段是写在用户名的位置 这是我的测试 NG 我使用 appium 进行测试 Test public void Test1 throws InterruptedE
  • 将 iOS 和 Android 客户端连接到 SockJS 后端

    我正在使用开发 WebSocket 消息传递后端Spring WebSockets https spring io guides gs messaging stomp websocket 它使用SockJS STOMP协议 之所以不使用普通
  • 通过 SSO 进行 Maven 设置?

    我有一些开发人员对于将 LDAP 用户名 密码存储在 settings xml 中以便访问 Nexus 感到不满意 他们的不满部分是出于 FUD 但也因为每当 LDAP 密码过期时都必须重新加密密码 这种情况在此处相对常见 带来的不便 有什
  • Airflow:只有一项任务的简单 DAG 永远不会完成

    我制作了一个非常简单的 DAG 如下所示 from datetime import datetime from airflow import DAG from airflow operators bash operator import B
  • 服务器显示文本而不是 HTML

    我正在尝试创建一个 C 服务器 它将接受输入并能够通过 html 格式将它们返回给用户 其中服务器充当用户界面 我当前的问题似乎无法弄清楚为什么 C 服务器在 localhost 3838 处将 HTML 代码以文本形式吐出 而不是将其显示
  • 在 PHP 中,为什么“or die()”可以工作,而“or return”却不行?

    在 PHP 中 您可以通过调用来处理错误or die当遇到某些错误时退出 如下所示 handle fopen location r or die Couldn t get handle Using die 不是处理错误的好方法 我宁愿返回一
  • C# 服务器和 Java 客户端:TCP 套接字通信问题

    我用 C 编写了一个服务器程序TCPListner和一个使用套接字的 Java 客户端程序 但我无法将复杂的对象从 Java 客户端发送到 C 服务器 当我通过将字符串转换为字节数组从 Java 客户端发送到 C 服务器时 当转换回字符串时
  • Ansible设置mysql root密码

    你们中有人有想法构建一个 yml 用于 mysql 更新 root 密码并授予权限吗 我已经创建了我的剧本 并且在全新安装时它按预期工作 完全没有问题 但是 当我再次进行 vagrant 配置时 它现在无法设置 root 密码 并且出现错误
  • 按排序顺序将元素插入数组

    我正在尝试按排序顺序将元素添加到数组中 这是我的代码 public class SortedInsertion public static void main String args int arr new int 6 arr 0 5 ar
  • LINQ如何返回最后一个日期以及第一个和最后一个计数之间的差异

    我有一个包含以下列和示例数据的表 acteename updated at count count is not sorted in db dev 52 2 7 2020 5 56 43 PM 1 dev 52 2 7 2020 5 56
  • 根据 Woocommerce 中的特定产品数量渐进式固定优惠券折扣

    我有一个小问题 不知道如何解决自己 我想在我的 Woocommerce 商店中仅针对一种产品使用此逻辑 我使用这样的链接来自动应用优惠券代码并添加到购物车 https testsite com checkout add to cart Pr
  • Videojs仅添加播放控件

    我在用Video js在我的网页中播放视频 我想将播放器控件自定义为仅播放按钮 我的代码是
  • 如何构建/编译 ndk 应用程序?

    嗨 现在我正在下载 ndk 但我不知道如何构建和编译 实际上我是 Android 应用程序的新手 现在我正在使用 linux 并且我不太擅长命令行 embdes embdes laptop cd home embdes projects a
  • 如何从简单的 jsdom 函数返回值?

    我将 jsdom 与 jquery 一起使用 并且运行得很好 然而 我试图将我的代码模块化一点 这样我就不会重复自己 所以我用一些 jsdom 代码创建了一个基本函数 它接受一些 html DOM 用 jquery 调整它 然后将其吐出来