【发布时间】:2013-02-11 18:20:29
【问题描述】:
我们正在尝试编写一个脚本,用其内容替换已弃用的标签,例如 <font>。我们所拥有的大致如下:
while($("font").length > 0) {
$("font").each(function() {
$(this).replaceWith($(this).html());
});
}
while 循环只是因为如果字体标签被替换为它的内容,并且其中一个元素子元素也是字体标签,那么它会同时捕获父元素和子元素。
我们的问题是我们无法控制输出的内容 - 这是由我们的客户输入的。我们最近看到的一个格式错误的 HTML 示例是<p><font><span><font><div></font><strong></strong><strong></div></span></font></p>。显然,这是严重的格式错误,在理想的世界中,我们的客户会正确输入。上面的脚本在所有体面的浏览器(Chrome、Firefox 和 Safari)以及令人惊讶的 IE 9 中都可以完美运行。但是它在 IE 6-8 中中断,导致这些标签中的任何内容都不会显示。我们的目标是替换所有字体标签,并且仍然显示其中的内容。
有谁知道我们可以使用 jQuery 或经典 ASP 达到预期效果的任何方法吗?
另请注意,在这个特定的客户案例中,它非常基本 - 仅请求替换 1 个标签。其他情况包括Word在将文本从Word传输到网站时添加的标签,<i>、<b>、<span>等。
提前致谢, 问候, 理查德
【问题讨论】:
-
该格式错误的代码是由所见即所得编辑器生成的吗?如果是这样,使用更好的 WYSIWYG 生成干净的代码可能是一个更简单的解决方案。
-
您最好使用
$('font').replaceWith(function(){return $(this).contents();});,而不是复制 HTML。这样就不需要while循环了。 -
是的 - 这是我们的想法,但我们只是定制团队 - 更新编辑器取决于核心代码人员,但他们不会用驳船杆来触及它。他们知道这是垃圾,但我们的产品不再积极销售,升级它的风险太大。
-
@lonesomeday,我刚刚尝试了您的解决方案以及stackoverflow.com/questions/2018050/…(使用
this.childNodes)记录的解决方案,但 IE 显示相同。 -
@ClarkeyBoy 是的,恐怕它不能解决问题,但它们都是更好的解决方案。
标签: jquery asp-classic