Я вставляю строковое значение json как значение атрибута элемента кнопки, как например ниже
var $json = JSON.stringify('{"Long_text":"This is \'my json string and soon..."}');
$("#button_id").attr('data-json', $json);
Это работает на некоторых из моих страниц, но когда в тексте есть одинарная кавычка, даже если она экранирована с помощью косой черты, значение в атрибуте element создает новую строку и прерывает нравиться:
<button data-json = "{"Long_text":"This is \' "
"my json string and soon..."}" >Click</button>
Я пробовал использовать
replace('/\r?\n|\r|\n/g/',''); //to replace multiple newlines
Даже если я заменю двойные пробелы, это не сработает, потому что сам атрибут был искажен. Поэтому, когда я получаю атрибут и пытаюсь проанализировать значение json, это вызывает ошибку.
Я нашел это, "-> Разрыв строки внутри значения атрибута HTML-тега", следует ли мне заменить пробелы этим% 0D% 0A? как было предложено в сохраненные символы новой строки или пробелы?
Любая помощь или совет приветствуются! Спасибо!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я нашел другое решение, кроме замены пробелов этим% 0D% 0A из этого Разрыв строки внутри значения атрибута HTML-тега
var base64 =
{
encode: function utoa(str)
{
return window.btoa(unescape(encodeURIComponent(str)));
},
decode: function atou(str)
{
return decodeURIComponent(escape(window.atob(str)));
}
}
Я пробовал это, и это работает, это также делает строку нечитаемой, поскольку она base64_encoded, это позволяет избежать разрывов строк, вызванных пробелами и кавычками.
var $json = base64.encode(JSON.stringify('{"Long_text":"This is \'my json string and soon..."}'));
$("#button_id").attr('data-json', $json);
затем получите значение и снова преобразуйте его,
var valid_json = JSON.parse(base64.decode($("#button_id").attr('data-json')));
Спасибо!
Я бы посоветовал попробовать вариант, который вы сами упомянули в первую очередь, лучше всего попробовать все ваши варианты, потому что это может сработать, и тогда вам даже не нужно будет задавать вопрос в первую очередь! :)