0

我有一个包含 unicode 编码的不间断空格的字符串。我需要将此字符串保存到隐藏的 HTML 元素中,以便另一个函数可以读取此值。

看起来html()函数对字符串进行了一些转换。例子:

  var testString = "string with \xa0 non breaking space";
  $(".export-file-buffer").html(testString);
  var receivedString = $(".export-file-buffer").html();
  console.log(testString);
  console.log(receivedString);

我在控制台中看到的:

string with   non breaking space
string with   non breaking space

为什么会这样?你能指出我描述这种行为的文档吗?

4

2 回答 2

0

data()如果您只需要在元素上存储对它的引用,则可以使用该方法,而不是使其可显示。

var testString = "string with \xa0 non breaking space";
var $target = $('#target');

$target.data('rawData', testString);

console.log($target.data('rawData'));

var fromData = $target.data('rawData');

console.log(
  fromData.split('').map(function(character){
    if (character < ' ' || character > '~' ) {
      return '\\x'+ character.charCodeAt(0).toString(16);
    } else {
      return character;
    }
  }).join('')
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="target"></div>

如您所见,该值未转换为&nbsp;. 这样做的原因是,当 jQuery 使用它在 Element 上设置值时,data()它不会直接将它放在元素上。相反,它将值存储在内部缓存中并将值与元素相关联。由于该值仅在 javascript 内存中,因此浏览器不会对其进行转换。

该值仍然在控制台中打印出来,而不是\xa0因为该十六进制字符代码引用不是 ascii 图表上的可见字符代码。我包含了一个小脚本,用于在空格之前和波浪号之后对 ascii 图表上的字符进行编码。

于 2018-05-16T20:30:03.610 回答
-1

有多种方法可以保存可以在 html 页面上共享的字符串。

  1. 使用输入类型=“隐藏”。在这里你可以简单地通过 $(".export-file-buffer").val(testString) 保持价值,就像你对 html 所做的那样
  2. (不太推荐)使用全局变量/保持窗口。 window.export-file-buffer = testString 并在稍后调用window.export-file-buffer检索
于 2018-05-16T21:07:12.397 回答