2

<div>Unicode文字を動的に生成し、のようなシーケンスを使用してに挿入することはできますが、&#x00f0;この入力を文字自体ではなくエスケープシーケンスとして取得したいと思います。

このJSFiddleの例を参照してください:

<button id="insertDh">insert funny d to mytext</button>
<div id="mytext"><i>mytext: please click button above</i></div>
<hr>
<textarea id="theSource"></textarea>
<button id="getSource">get mytext's source</button>

$("#insertDh").click(function() {
    $("#mytext").html("&#x00f0;");
});

$("#getSource").click(function() {
   $("#theSource").val($("#mytext").html()); 
});​

つまり、[mytextのソースを取得]をクリックすると、テキストエリアに&#x00f0;ðではなくで入力したいと思います。これは可能ですか?もしそうなら、どのように?

4

2 に答える 2

2

次のように、を使用charCodeAt()して10進数の文字コードを取得し、それをで16進数に変換できtoString(16)ます。

   temp = $("#mytext").html().charCodeAt(0).toString(16);
   while (temp.length < 4) {
      temp = '0'+temp; //complete hex number with zeros to obtain four digits
   }
   temp = '&#x' + temp + ';';
   $("#theSource").val(temp);

作業デモを見る

于 2012-10-20T20:46:10.147 に答える
2
$("#theSource").val(
    $("#mytext").html()
    // Replace non-ascii code-points with HTML entities.
    .replace(
      /[\ud800-\udbff][\udc00-\udfff]|[^\x00-\xff]/g,
      function (nonAscii) {
        var codepoint;
        if (nonAscii.length === 1) {  // A single basic-plane codepoint.
          codepoint = nonAscii.charCodeAt(0);
        } else {  // A surrogate pair representing a unicode scalar value.
          codepoint = 0x10000 + (
            ((nonAscii.charCodeAt(0) & 0x3ff) << 10)
             | (nonAscii.charCodeAt(0) & 0x3ff));
        }
        return '&#x' + codepoint.toString(16) + ';';
      }));
于 2012-10-20T20:52:17.150 に答える