Функция jQuery html () и - PullRequest
       25

Функция jQuery html () и

0 голосов
/ 16 мая 2018

У меня есть строка, которая содержит 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

Почему именно это происходит? Не могли бы вы указать мне на документ, который описывает это поведение?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Существует несколько способов сохранить строку, которую можно опубликовать на html-странице.

  1. Использование ввода type = "hidden".Здесь вы можете просто сохранить значение в $ (". Export-file-buffer"). Val (testString) так же, как вы это делали для html
  2. (менее рекомендуется) Использование глобальной переменной / сохранение окна. window.export-file-buffer = testString и получить позже вызов window.export-file-buffer
0 голосов
/ 16 мая 2018

Вместо того, чтобы сделать его отображаемым, если вам просто нужно сохранить ссылку на него в элементе, вы можете использовать метод 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 устанавливает значение для элемента с data(), оно не помещает его непосредственно в элемент. Скорее, он хранит значение во внутреннем кэше и связывает значение с элементом. Поскольку значение находится только в памяти javascript, браузер не преобразует его.

Значение по-прежнему выводится в консоли не как \xa0, поскольку эта шестнадцатеричная ссылка на код символа не является видимым кодом символа на диаграмме ascii. Я включил небольшой скрипт, который кодирует символы на графике ascii до пробела и после тильды.

...