从DOM中提取时,字符串的处理方式不同

时间:2014-09-26 00:09:33

标签: javascript jquery

我正面临着一个非常奇怪的Javascript问题。当我从DOM中提取文本并尝试解码HTML实体时,它无法正常工作。但是,当我直接在代码中分配值时,它的工作正常。

我只是不明白为什么在这两种情况下都会对字符串进行不同的处理。我已经在FireFox和Chrome中进行了测试,两者都产生了相同的结果。

更新: 正确的输出应为%7B(解码字符串后)。这意味着当我将值直接分配给变量时它正常工作,但是当从DOM中提取时,它不是。如何从DOM中提取文本并对其进行解码,以便生成"%7B" ?

DEMO jsFiddle

HTML

<div class="myclass">\u00257B</div>

Javascript代码:

    $(document).ready(function(){

    //Extracting the text from DOM
   var myText = $(".myclass").html();
    //decoding HTML entities
   var decodedText = $("<div />").html(myText).text();
    //alerting the decoded text
    alert(decodedText); // output: \u00257B

    //assigning the value directly to the variable
   var myText2 = "\u00257B";
    //decoding HTML entities
   var decodedText2 = $("<div />").html(myText2).text();
    //alerting decoded text
    alert(decodedText2); // output: %7B

});

2 个答案:

答案 0 :(得分:1)

myText2产生不同结果的原因是因为字符串文字中的反斜杠是转义字符。

要逃避反斜杠,只需使用两次:

myText2 = "\\u00257b";

Here is a some further information about escape characters in JavaScript


修改

这可能是一种更好的方法,但这样做有效:(如果文本中的值是不受控制的输入,则eval通常不受欢迎并具有安全隐患)

myText = eval("\"" + decodedText + "\"")

答案 1 :(得分:0)

我认为这是因为当您从dom中提取字符串时,“\ u”将被转义。

如果你var myText2 = "\\u00257B";,你会得到相同的结果

http://jsfiddle.net/9n6t5qxr/1/

如果您执行console.log('\u0025'),则会打印%,这就是您看到%7B

的原因