Я хочу сохранить html-строку DOM, а затем восстановить ее точно так же. Код выглядит примерно так:
var stringified = document.documentElement.innerHTML
// later, after serializing and deserializing
document.documentElement.innerHTML = stringified
Это работает, когда все идеально, но когда DOM не является w3c-comliant, возникает проблема. Первая строка отлично работает, stringified
точно соответствует DOM. Но когда я восстанавливаю из (не-w3c-совместимый) stringified
, браузер делает некоторую магию, а итоговая DOM не такая, какая была изначально.
Например, если мой оригинальный DOM выглядит как
<p><div></div></p>
то окончательный DOM будет выглядеть как
<p></p><div></div><p></p>
поскольку элементы div
не могут находиться внутри элементов p
. Есть ли способ заставить браузер использовать тот же синтаксический анализ html, который он делает при загрузке страницы, и принять сломанный html as-is?
Почему html сломан в первую очередь? DOM не контролируется мной.
Здесь jsfiddle, чтобы показать поведение http://jsfiddle.net/b2x7rnfm/5/. Откройте консоль.
<body>
<div id="asdf"><p id="outer"></p></div>
<script type="text/javascript">
var insert = document.createElement('div');
var text = document.createTextNode('ladygaga');
insert.appendChild(text);
document.getElementById('outer').appendChild(insert);
var e = document.getElementById('asdf')
console.log(e.innerHTML);
e.innerHTML = e.innerHTML;
console.log(e.innerHTML); // This is different than 2 lines above!!
</script>
</body>