Może to wydawać się dziwną prośbą i jest to dość niezwykłe, ale jest to wyzwanie, które próbuję rozwiązać.JavaScript: jak serializować element DOM jako ciąg do późniejszego użycia?
Załóżmy, że masz element DOM, który składa się z kodu HTML i niektórych zastosowanych stylów CSS oraz niektórych detektorów zdarzeń JS. Chciałbym sklonować ten element (i wszystkie stosowane CSS i JS), serializować je jako ciąg, który mógłbym zapisać w bazie danych, aby dodać ją do DOM w przyszłym żądaniu.
Wiem, że jQuery ma kilka z tych metod (takich jak $ .css(), aby uzyskać obliczone style), ale jak mogę zrobić te wszystkie rzeczy i przekształcić je w ciąg znaków, który mogę zapisać w bazie danych?
Aktualizacja: Tutaj jest elementem przykład:
<div id="test_div" class="some_class">
<p>With some content</p>
</div>
<style>
#test_div { width: 200px }
.some_class { background-color: #ccc }
</style>
<script>
$('#test_div').click(function(){
$(this).css('background-color','#0f0');
});
</script>
... a może serializacji próbki:
var elementString = $('#test_div').serializeThisElement();
co skutkowałoby sznurku, który wygląda mniej więcej tak:
<div id="test_div"
class="some_class"
style="width:200px; background-color:#ccc"
onclick="javascript:this.style.backgroundColor='#0f0'">
<p>With some content</p>
</div>
, więc mogę wysłać go jako żądanie AJAX:
$.post('/save-this-element', { element: elementString } //...
Powyższe stanowi jedynie przykład. Byłoby idealnie, gdyby serialowanie mogło wyglądać bardzo podobnie do oryginalnego przykładu, ale dopóki będzie to samo, co oryginał, byłoby mi z tym dobrze.
Czy mówimy o jednym elemencie? Lub zagnieżdżoną strukturę DOM o dowolnym rozmiarze? – nrabinowitz
Czy możesz podać przykładowy ciąg wyjściowy, którego można się spodziewać? –
Przechowywanie odwołań do wywołań zwrotnych zdarzeń nie będzie niezawodne. –