【问题标题】:jQuery replaceWith not working without DOMjQuery replaceWith 在没有 DOM 的情况下无法工作
【发布时间】:2020-06-07 02:26:17
【问题描述】:

我正在尝试在需要获取 HTML 字符串的 Node.js 服务器上进行一些元素操作,然后将一些节点替换为其他节点类型。这在我使用 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>");
  }

【问题讨论】:

    标签: javascript html jquery replacewith


    【解决方案1】:

    您的问题如下:

    const obj = $(html);
    

    这个obj是NULL。

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

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

    那么obj将是字符串的html标签中的一个div数组。

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

    【讨论】:

    • 传奇 非常感谢,这在 Node.JS 中有效
    猜你喜欢
    • 2012-12-21
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多