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 的对象进行任何尝试。
我正在尝试在 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 的对象进行任何尝试。