我使用Webservices获取的html内容,但它返回了错误的html格式,这会破坏页面。
它返回我需要纠正的自我关闭锚标记。
<p><a name="Example"/></p>
我正在尝试使用以下代码将上述代码更正为
<p><a name="Example"></a></p>
但它没有用 -
var obj1 = document.getElementsByTagName('html')[0];;
obj1.innerHTML = obj1.innerHTML.replace(/\/><\/p>/g, '></a></p>');
我不确定,但这似乎与我的正则表达式有关。
答案 0 :(得分:0)
我不认为问题(或至少是最重要的问题)是你的正则表达式。更重要的是,浏览器必须解析格式错误的HTML,并可能以意外的方式在内部切换它。结果甚至可能因浏览器而异。
下面的代码段显示了浏览器尝试解释您提供的输入html的结果。当我在Firefox v44.0.2的Stack Overflow代码段中运行此代码时,<p><a name="Example"/a></p>
的输入显示为<p><a name="Example"></a></p><a name="Example"> </a>
。请注意,代码至少以3种方式进行修改:
p
标记内的html在其外部重复注意:之前我甚至尝试进一步操作。
因此,很难知道你的正则表达式的输入是什么,使得很难知道如何编写正则表达式或任何其他算法来进一步清理它。如果您可以确定输入html中的大多数错误都是同一类型(例如,多个自动关闭锚标记是唯一的问题),那么可能能够修复&# 34;他们使用,例如,一个正则表达式。但是,如果html以各种方式写得很糟糕,我想知道你是否需要找出另一种方法来清理代码(例如手动?!)。
var obj1 = document.getElementsByTagName('div')[0];
var inner = obj1.innerHTML
.replace(/</g, "<")
.replace(/>/g, ">");
document.write("<p>The following shows what is actually retrieved by 'obj1.innerHTML':</p>");
document.write(inner);
&#13;
<div>
<p><a name="Example"/></p>
</div>
&#13;