为什么我的字符串声明的位置会影响我的html编码实体是否会正确显示



在向web应用程序添加新功能时,我需要动态设置Button对象的值。碰巧我需要在值中放入一些html编码的unicode字符。在实现这一点时,我发现我定义字符的位置决定了它们是否正确显示。如果我在onclick事件本身中定义字符,则字符将正确显示。如果我在函数中或在顶层定义它,它将显示为文本。

我已经将我的问题提炼成以下示例HTML/JS(请注意,我的最终问题是unicode字符,但我使用lt/gt作为示例):

<html><body>
<script type="text/javascript">
    var tlabel3 = '&gt; foo &lt;';
    function ChangeName2() {
        document.getElementById('button2').value = '&gt; foo &lt;';
    }
    function ChangeName3() {
        document.getElementById('button3').value = tlabel3;
    }
    function ChangeName4(label4) {
        document.getElementById('button4').value = label4;
    }
</script>
<input type=button id=button1 value="&lt; foo &gt;"> - <a href=# onclick="document.getElementById('button1').value = '&gt; foo &lt;'">Clicky</a>
<HR>
<input type=button id=button2 value="&lt; foo &gt;"> - <a href=# onclick="ChangeName2()">Clicky</a>
<HR>
<input type=button id=button3 value="&lt; foo &gt;"> - <a href=# onclick="ChangeName3()">Clicky</a>
<HR>
<input type=button id=button4 value="&lt; foo &gt;"> - <a href=# onclick="ChangeName4('&gt; foo &lt;')">Clicky</a>
</body></html>

在我的IE8, Safari, Chrome和FF3.6的测试中,这表现相同-按钮1和4,在onclick处理程序中定义的字符,正常工作。按钮2和3,字符在别处定义,显示文字&gt;字符串。

我的问题是,为什么字符串定义的位置很重要?我有一个工作,但因为所有四个浏览器的工作方式相同,我觉得我错过了一些Javascript的基本工作知识。

谢谢

当使用>和,lt;在HTML级别,它们在那里呈现,因此它们变成了>和<在javascript级别,它只是一个字符串,它不呈现为HTML(javascript)。>

你可以通过改变第一个按钮代码来看到发生了什么:

<a href="javascript:document.getElementById('button1').value = '&gt; foo &lt;'">Clicky</a>

这样,当你悬停链接并检查浏览器状态栏时,你会看到>和<符号,而不是>和和,lt;。这意味着浏览器已经呈现了它,因为它在HTML代码中。

要获得与javascript相同的结果,正确的做法是执行&gt;或者输入> <在javascript。>

最新更新