jQuery replaceWith 在没有 DOM 的情况下无法工作

jQuery replaceWith not working without DOM

我正在尝试在 Node.js 服务器上进行一些元素操作,我需要在其中获取 HTML 的字符串,然后将一些节点替换为其他节点类型。当我使用 DOM 时,这工作正常,但一旦我没有 DOM,它就不起作用。

在一个非常简单的示例中,我想做这样的事情...我找到所有 div 元素并替换为 spans

const html = '<html><div>hello</div><div>hello</div></html>';
const obj = $(html);
const filter = $(obj).find('div');

for (let j = filter.length; j >= 0; j--) {
  $(filter[j]).replaceWith("<span>goodbye</span>");
}

console.log(obj);

我不能只对字符串进行查找和替换,因为我不希望所有元素在我执行此操作之前基于各种事情进行筛选。

说节点不是元素是行不通的。有什么办法可以做到这一点?我也尝试过使用 JSDOM 来做到这一点,但还是没有成功。

我希望这里的控制台显示带有两个 spans 而不是两个 divs 的 HTML 元素,我尝试为此添加一个 jsfiddle 但是我得到了一个不同的错误也在这里,如果有人可以提供帮助,我们将不胜感激。

http://jsfiddle.net/vkn285a1/1/

** 更新 **

根据下面的回答,我已经更新了,但我现在得到了我想要的结果,谢谢。我不得不改为使用 SVG,这正是我实际解析的内容,它起到了很好的作用

  const html = "<svg><g><text>hello</text><text>hello</text></g></svg>";
  const obj = $.parseHTML(html);

  const filter = $(obj).find("text");

  for (let j = filter.length; j >= 0; j--) {
    $(filter[j]).replaceWith("<span>goodbye</span>");
  }

您的问题如下:

const obj = $(html);

这个 obj 是 NULL。

您必须使用 parseHTML 函数从字符串中获取对象,如下所示。

const html = '<html><div>hello</div><div>hello</div></html>';
const obj = $.parseHTML(html);

那么obj就是一个div数组,在html标签的string.

在那之后,你可以对那些不为 NULL 的对象进行任何尝试。