Плохо ли добавлять свойства в DOM-узлы? - PullRequest
16 голосов
/ 22 июня 2010

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

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

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

Ответы [ 4 ]

16 голосов
/ 23 июня 2010

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

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

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

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

2 голосов
/ 22 июня 2010

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

0 голосов
/ 22 июня 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...