Я заметил некоторую разницу в представлении строк в DOM, переданных с сервера как атрибут HTML, или как глобальный var.Различные строковые представления в HTML и JS
Существует строка, которая является JSON закодированный объект с помощью специальных символов в нем и установить эту строку в folowing способами:
<div id="my-id"
data-opt='[{"id":"600900340","parent_id":"600900000","name":"\tCollector\u0027s Cars \u0026 Models","visible":"1","level":"3"}]'
></div>
<script>
window.opt = '[{"id":"600900340","parent_id":"600900000","name":"\tCollector\u0027s Cars \u0026 Models","visible":"1","level":"3"}]';
</script>
Теперь проверьте их ЯШ:
;(function(window) {
console.log(document.getElementById('my-id').dataset.opt);
console.log(window.opt);
}(window))
Выход:
[{"id":"600900340","parent_id":"600900000","name":"\tCollector\u0027s Cars \u0026 Models","visible":"1","level":"3"}]
[{"id":"600900340","parent_id":"600900000","name":" Collector's Cars & Models","visible":"1","level":"3"}]
Почему они разные?
Вот jsfiddle http://jsfiddle.net/9ss5M/3/
_ «Почему они разные?» _ - потому что вы используете синтаксис escape-кода JavaScript unicode один раз в контексте JavaScript ('window.opt') и один раз в контексте HTML, где он берется буквально (' data-opt '). – CBroe