有没有办法使用ASP函数/ RegExp / javascript将名称空间xmlns="http://www.w3.org/1999/xhtml"
添加到所有html标签? (这类似于向html标签添加属性)
例如:
以下是textarea的主体:
<p>Welcome to the StackOverFlow site.</p>
<p xmlns="http://www.w3.org/1999/xhtml">Please <a href="http://stackoverflow.com">click here</a> for more info.</p>
正文包含两个html标记,<p>
&amp; <a>
。
此处有一个<p>
代码已包含名称空间xmlns="http://www.w3.org/1999/xhtml"
现在我需要将命名空间添加到其他标签。
我在ASP页面上尝试了很多解决方法,但没有运气。
请帮我解决这个问题。
答案 0 :(得分:1)
这在jQuery中非常简单:
对于页面上的所有元素:
$("*").attr("xmlns", "http://www.w3.org/1999/xhtml");
对于textarea中的一些代码的所有元素(例如,id为'MyTextArea'):
$($("#MyTextArea").text()).attr("xmlns", "http://www.w3.org/1999/xhtml");
答案 1 :(得分:1)
以下是仅使用JavaScript regex的解决方案:
result = subject.replace(
/(<\w+)((?:\s+(?!xmlns\b)\w+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+))*\s*\/?>)/g,
'$1 xmlns="http://www.w3.org/1999/xhtml"$2'
);
正则表达式匹配任何看似开头标记(<abc>
)或自闭标记(<xyz />
)的内容。标记可以包含任意数量的属性,除非其中一个属性名为“xmlns”。属性值可以是双引号,单引号或不引用。如果匹配标记,则会在标记名称后立即添加“xmlns”属性。
请注意,此解决方案无法处理很多内容,例如“无价值”属性(例如nowrap
),或使用命名空间限定的标记或属性名称(例如<abc:xyz>
)。正则表达式在HTML上确实不能很好地工作(这是一种耻辱,因为这是大多数人似乎想要使用它们的原因)。任何regex-vs-HTML解决方案都必须从简化假设的详尽列表开始,例如“no <script>
tags”或“不要担心CDATA部分或SGML注释”。
答案 2 :(得分:0)
基于Alan的输入,我在ASP
上构建了我的解决方案Function ReplaceAllByExpression(str)
Dim objRegExp, sHtml
sHtml = str
Set objRegExp = New RegExp
objRegExp.IgnoreCase = True
objRegExp.Global = True
objRegExp.MultiLine = True
objRegExp.Pattern = "(<(?!tr|td|thead|tbody)\w+)((?:\s+(?!xmlns\b)\w+\s*=\s*(?:""[^""]*""|'[^']*'|[^\s>]+))*\s*\/?>)"
sHtml = objRegExp.Replace(sHtml, "$1 xmlns=""http://www.w3.org/1999/xhtml""$2")
ReplaceAllByExpression = sHtml
End Function