簡體   English   中英

從DOM提取字符串時,字符串的處理方式有所不同

[英]String is treated differently when extracted from DOM

我在使用Javascript時遇到了一個非常奇怪的問題。 當我從DOM中提取文本並嘗試對HTML實體進行解碼時,它不起作用。 但是,當我直接在代碼中分配值時,它就可以正常工作。

我只是不明白為什么在兩種情況下都將字符串區別對待。 我已經在FireFox和Chrome中進行了測試,並且都產生了相同的結果。

更新 :正確的輸出應為%7B(在解碼字​​符串之后)。 這意味着當我直接將值分配給變量時,它可以正常工作,但是從DOM中提取時,它就不能工作。 我如何從DOM中提取文本並對其進行解碼,以便生成“%7B”?

演示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

});

myText2產生不同結果的原因是因為字符串文字中的反斜杠是轉義字符。

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

myText2 = "\\u00257b";

這是有關JavaScript中轉義字符的更多信息


編輯

也許有更好的方法,但是它會起作用:(如果文本的值是不受控制的輸入,則eval通常會被皺眉並且會帶來安全隱患)

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

我認為這是因為當您從dom中提取字符串時,“ \\ u”會轉義。

如果您這樣做var myText2 = "\\\%7B"; 你會得到相同的結果

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

如果您執行console.log('\%')則會顯示% ,這就是為什么您看到%7B

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM