1

假设我有这个 HTML 页面:

<html>
  <head>
    <script type="text/javascript">
      function echoValue(){
        var e = document.getElementById("/path/&#x24;whatever");
        if(e) {
          alert(e.innerHTML);
        }
        else {
          alert("not found\n");
        }
      }
    </script>
  </head>
  <body>
    <p id="/path/&#x24;whatever">The Value</p>
    <button onclick="echoValue()">Tell me</button>
  </body>
</html>

我假设浏览器将 ID 字符串/path/&#x24;whatever视为简单字符串。实际上,它将 转换&#x24;为它的呈现表示 ( $)。

然而,javascript 代码使用文字字符串&#x24;来搜索元素。所以,电话document.getElementById失败了,我从来没有得到这个段落的价值。

有没有办法强制浏览器按字面意思使用给定的 ID 字符串?


编辑:
当然我知道我不必逃避$. 但是会生成网页,并且生成器会进行转义。所以,我必须应付我所拥有的。

4

3 回答 3

5

在 中<p id="...">&#x24;序列被解释为$,因为它出现在属性中并被视为 HTML 实体。所有其他元素属性也是如此。

<script>元素中,HTML 实体根本不被解释,所以它按字面意思显示。

于 2013-01-25T09:56:19.667 回答
2

您可以尝试在没有 jQuery 的情况下解码 javascript 文本:

<html>
  <head>
    <script type="text/javascript">
      function decodeEntity(text){
        text = text.replace(/<(.*?)>/g,''); // strip out all HTML tags, to prevent possible XSS
        var div = document.createElement('div');
        div.innerHTML = text;
        return div.textContent?div.textContent:div.innerText;
      }
      function echoValue(){
        var e = document.getElementById(decodeEntity("/path/&#x24;whatever"));
        if(e) {
          alert(e.innerHTML);
        }
        else {
          alert("not found\n");
        }
      }
    </script>
  </head>
  <body>
    <p id="/path/&#x24;whatever">The Value</p>
    <button onclick="echoValue()">Tell me</button>
  </body>
</html>

JSFiddle:http: //jsfiddle.net/phTkC/

于 2013-01-25T10:33:46.510 回答
0

我建议您在 javascript 代码中解码 HTML 实体:

<html>
  <head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
    <script type="text/javascript">
      function echoValue(){
        var decoded_string = $('<div />').html("/path/&#x24;whatever").text();
        var e = document.getElementById(decoded_string);
        if(e) {
          alert(e.innerHTML);
        }
        else {
          alert("not found\n");
        }
      }
    </script>
  </head>
  <body>
    <p id="/path/&#x24;whatever">The Value</p>
    <button onclick="echoValue()">Tell me</button>
  </body>
</html>
于 2013-01-25T10:08:34.430 回答