【发布时间】: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