在 JavaScript 字符串中使用 HTML 标签,同时遵守 W3C 规则
这是我的代码:
<a href="#">
<img src="myimage.jpg"
onmouseover="showDescription(
'Text', 'Text with HTML tags in them<br />More text');"
onmouseout="revertDescription();"
alt="Image description">
W3C 标记验证器不喜欢这样。它不希望我的 JavaScript 代码中包含 HTML 标签。如果我尝试这样做,它会产生以下错误消息:
字符“<”是分隔符的第一个字符,但作为数据出现
如果我将包含 HTML 标记的字符串传递给 document.getElementById('myElement').innerHTML,如何解决此问题,同时确保我的页面不会混乱?
Here's my code:
<a href="#">
<img src="myimage.jpg"
onmouseover="showDescription(
'Text', 'Text with HTML tags in them<br />More text');"
onmouseout="revertDescription();"
alt="Image description">
The W3C Markup Validator doesn't like this. It doesn't want HTML tags inside my JavaScript code. Here's the error message it produces if I attempt this:
character "<" is the first character of a delimiter but occurred as data
How can I fix this while making sure that my page doesn't mess up if I pass the HTML tag-containing string to document.getElementById('myElement').innerHTML
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您可以将函数包装在文档中其他位置的单独
标记内,并使用 ...
From http://javascript.about.com/library/blxhtml.htm:
You could wrap your functions inside separate
<script>...</script>
tags somewhere else in the document, and there use ...From http://javascript.about.com/library/blxhtml.htm:
有很多方法可以到达那里。
<
或<
代替<
使用
>
或>
代替>
document.getElementById("image1").onmouseover = showDescription(
'文本', '其中包含 HTML 标签的文本
更多文本');
希望这有效。
There are many ways to get there.
<
or<
instead of<
Use
>
or>
instead of>
document.getElementById("image1").onmouseover = showDescription(
'Text', 'Text with HTML tags in them<br />More text');
Hope this works.
与所有属性值一样,您必须对
&
、<
和属性分隔符(此处为"
)进行 HTML 编码。属性值中的 JavaScript 没有区别;HTML 属性值在 JavaScript 查看之前就被解码了,这与内容为
CDATA 的
,因此在 HTML4 中没有元素形成对比。
&
转义。在 XHTML 中,没有 CDATA 元素,您可以添加] 部分来生成 XHTML。行为相同,但对于脚本元素和事件处理程序属性来说,通过在字符串文字中不使用
&
或<
字符来避免问题通常更简单。您可以使用另一种转义来解决此问题:Like with all attribute values, you must HTML-encode
&
,<
, and the attribute delimiter ("
here). The fact that it's JavaScript inside the attribute value makes no difference; the HTML attribute value is decoded before JavaScript gets a look at it.This is in contrast to a
<script>
element, whose contents areCDATA
and thus not&
-escaped in HTML4. In XHTML there are no CDATA elements; you can add a<![CDATA[
section to make XHTML behave the same, but it's usually simpler for both script elements and event handler attributes to just avoid the problem by never using a&
or<
character. In a string literal another escape is available which you can use to get around this:将
<
替换为%3C
,将>
替换为%3E
,并在输出内容时使用 unescape。这不会验证:
这给出了相同的结果并验证:
Replace
<
by%3C
and>
by%3E
and use unescape when outputting the contents.This won't validate:
This gives the same results and validates:
将其放入
稍后在您的 HTML 中:
How about putting this within a <script ...> block:
And later in your HTML: