jQuery replaceWith在没有DOM的情况下不起作用

问题描述 投票:0回答:1

我正在尝试在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>");
  }

enter image description here

javascript html jquery replacewith
1个回答
1
投票

您的问题如下:

const obj = $(html);

obj为NULL。

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

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

然后obj将是字符串html标记中的div数组。

enter image description here

之后,您可以为非NULL的对象尝试任何操作。

© www.soinside.com 2019 - 2024. All rights reserved.