【问题标题】:Replace all instances particular tag when HTML may be malformed当 HTML 格式错误时替换所有实例特定标记
【发布时间】: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


【解决方案1】:

从输出中替换所有 标签不是更容易吗?在给定的情况下,这仍然不会提供验证 XHTML 代码( 内的

,未封闭的 ),但可能足以查看文本。

这是在经典 ASP 中使用正则表达式的方法:

function removeFontTags(s_text)
    dim obj_regex
    set obj_regex = new RegExp

    obj_regex.IgnoreCase = true
    obj_regex.Global = true
    obj_regex.Pattern = "\<\/?font\>"

    removeFontTags = obj_regex.replace(s_text, "")

    set obj_regex = Nothing
end function

Response.Write removeFontTags("<p><font><span><font><div></font><strong></strong><strong></div></span></font></p>")

' returns: <p><span><div><strong></strong><strong></div></span></p>

但也许你可以通过这种方式添加更多的卫生设施来展示你需要的东西。

【讨论】:

  • 感谢@gpinkas,这肯定适用于没有属性的标签。我目前使用jQuery来替换&lt;font ...&gt;,但是我发现了一个缺陷;如果他们有&lt;font title='bob &gt; fred'&gt; 怎么办?它将删除title 属性中的&gt; 并包括在内。我看不到实现此目的的方法。我将尝试从font 标签中删除所有属性;不理想,但必须这样做。我还提出了一个案例,试图让工具将这个无效的 HTML 输出到最新版本(现在显然没有)。
  • 好吧,如果你能确定属性的语法,你可以像这样轻松地增强正则表达式:"\&lt;\/?font(?:\s+\w+=\'[^']\')*\&gt;"。我认为,在 ASP 中替换会更安全,以防止 jQuery 和无效代码结构出现问题...
猜你喜欢
  • 2011-09-07
  • 2018-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-23
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多