2017-01-05 2 views
0

Использование и html-элемента элемента addEventListener имеет ряд преимуществ перед использованием встроенных событий, например onclick.Как хранить элемент html, включая его прослушиватели событий?

Однако, чтобы сохранить элемент, включая его встроенное событие, прямолинейно, например, путем вставки его в родительский элемент и сохранения родительского innerHTML.

Возможно ли сделать что-то подобное при использовании прослушивателей событий?

Edit:

я понял, что мой вопрос не достаточно объяснить. Так вот некоторые дополнения.

Под «магазином» я имею в виду способ получить информацию, содержащую элемент и прослушиватель событий.

Аналог с встроенными событиями легко: просто вставьте в родительский элемент и сохраните родительский innerHTML (строка) где-нибудь, например в базе данных, и заново создайте элемент позже, загрузив строку и применив ее к innerHTML некоторый элемент.

Но как сделать аналог с элементами при использовании прослушивателей событий? Нельзя использовать innerHTML, так как события не сохраняются.

Надеюсь, это немного уточнит мой вопрос.

Edit 2

С помощью комментариев, которые я сделал несколько неудачных попыток.

Можно получить информацию о element с использованием createDocumentFragment() или element.cloneNode(true).

Однако первый метод не работает для внешнего хранилища, поскольку, если я правильно понял, будет содержать только указатель. Ниже приведен пример:

https://jsfiddle.net/hcpfv5Lu/

Второй метод не работает. Я не совсем уверен, почему, но если у меня JSON.stringify, то клон «исчезает». Вот пример:

https://jsfiddle.net/3af001tq/

+0

Что вы подразумеваете под "магазином"? – KevBot

+0

@KevBot Я имею в виду способ получить информацию, чтобы поместить ее в другое место и загрузить ее позже. Например, можно сохранить 'innerHTML' (строку) одного элемента и повторно применить его позже к другому элементу, чтобы восстановить прежний элемент. – Daniel

+0

Я что-то не хватает? addEventListener - это javascript, а не html – Cruiser

ответ

-1

Да.

Вы можете использовать что-то вроде.

<ul> 
    <li id="list">Some data</li> 
    <li>Dumy</li> 
</ul> 

затем в вашем файла JavaScript,

document.getElementById("list").addEventListener("click", function(){ 
    var htmlMarkUp = this.parentNode.innerHTML; 
}); 

Это сохранит содержимое HTML НСБ в var htmlMarkUp.

+0

Спасибо. Но я не хотел хранить «innerHTML» через прослушиватель событий. Скорее я имел в виду способ хранения элемента *, включая * его прослушиватель событий. – Daniel

+0

встроенный прослушиватель событий или один во внешнем js-файле? –

+0

Нестровые события. – Daniel

0

Вы можете использовать фрагмент документа для хранения узла DOM в переменной JavaScript, который при необходимости может быть добавлен к элементу DOM.

https://developer.mozilla.org/en/docs/Web/API/Document/createDocumentFragment

+0

Спасибо. Похоже, это может сработать. К сожалению, я не могу разобраться в деталях: https://jsfiddle.net/hcpfv5Lu/. Чтобы сохранить элемент, я использую 'JSON'. В противном случае я получаю только указатель на элемент, я думаю. Но когда я его восстанавливаю, javascript жалуется, что это не узел. – Daniel

+0

Я думаю, что вы, возможно, лаем неправильное дерево, узел dom не может быть сохранен в json формате. Если вам нужно хранить HTML в формате JSON, вам понадобится строка, тогда вам нужно добавить эту строку к узлу, если этого еще не существует, вам нужно будет создать его с помощью doc frag или document.createElement – MrBizle

+0

Спасибо. Я не уверен, что получаю ваше предложение. Я хочу преобразовать элемент DOM (включая его прослушиватели событий, прикрепленные javascript) в строку, чтобы сохранить его в базе данных. Я могу сохранить DOM, исключая его прослушиватели событий, с помощью 'string = JSON.stingify (element.innerHTML)' и восстановить его с помощью 'element.inerHTML = JSON.parse (string)'. Но как сохранить прослушиватели событий? – Daniel