我正面临着一个非常奇怪的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
});
答案 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