Подтвердить что ты не робот

Неправильная практика заключается в добавлении свойств к узлам DOM?

JavaScript позволяет добавлять произвольные свойства и методы к любому объекту, включая узлы DOM. Предполагая, что свойство было хорошо импоставлено (что-то вроде _myLib_propertyName), так что вряд ли возникнет конфликт, есть ли веские причины не записывать данные в узлы DOM?

Есть ли хорошие примеры использования?

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

4b9b3361

Ответ 1

Я думаю больше всего на свете, лучшая причина не хранить данные в DOM заключается в том, что DOM предназначен для представления структуры контента и стилизации для HTML-страницы. Хотя вы, несомненно, могли бы добавлять данные в узлы в порядке имен, чтобы избежать конфликтов, вы вводите состояние данных в визуальное представление.

Я пытаюсь найти пример для хранения данных в DOM или против них и почесываю голову, чтобы найти убедительный пример. Раньше я обнаружил, что разделение состояния данных от визуального состояния спасло головную боль во время повторных проектов сайтов, над которыми я работал.

Ответ 2

Нет, обычно плохая идея хранит ваши собственные свойства на узлах DOM.

  • Узлы DOM - это объекты-хосты, а объекты-хосты могут делать то, что им нравится. В частности, в спецификации ECMAScript для объектов-хостов нет требования разрешить такое расширение, поэтому браузеры не обязаны его разрешать. В частности, новые браузеры могут отказаться, а существующий код, основанный на нем, сломается.
  • Это не все объекты хоста в существующих браузерах. Например, текстовые узлы и все объекты ActiveX (такие как объекты XMLHttpRequest и XMLDOM, используемые для синтаксического анализа XML) в IE не выполняются, а поведение отказа варьируется от ошибок бросания до молчащего сбоя.
  • В IE возможность добавления свойств может быть отключена для целого документа, включая все узлы в документе, с линией document.expando = false;. Таким образом, если какой-либо из кода на вашей странице включает эту строку, весь код, основанный на добавлении свойств на узлы DOM, завершится с ошибкой.

Ответ 3

Если вы посмотрите на HTML 5, есть атрибут data для полей, который позволит вам хранить информацию для поля.

Ответ 4

Не удивляйтесь, столкнувшись с проблемами с IE 6 и 7. Они очень несовместимы с setAttribute vs set как свойство.

И если вы не будете осторожны, вы можете установить круговые ссылки и дать себе утечку памяти.

http://www.ibm.com/developerworks/web/library/wa-memleak/

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