Установить данные на текстовых узлах в IE с помощью JavaScript - PullRequest
0 голосов
/ 22 июня 2010

Я создал скрипт для привязки данных к dom-узлам, что-то вроде метода jQuery.data. По сути, сценарий устанавливает свойство для узла, являющегося ключом объекта, который будет содержать данные каждого узла, но в IE 7 установка свойства для текстового узла вызывает ошибку:

var a=document.createElement("div");
a.test="test";
alert(a.test); //Works and shows "test"

var a=document.createTextNode("text");
a.test="test";  //Throws an error

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

Ответы [ 2 ]

1 голос
/ 22 июня 2010

Лучший план: не делайте этого.

В общем случае, назначать свойства хост-объекту (т. Е. Всему, что предоставляется браузером, а не собственным объектам JavaScript), - плохая идея.Хост-объекты не обязаны разрешать такого рода расширения (также называемые «расширяемыми»), а многие (например, объекты ActiveX в IE) этого не делают.Кроме того, IE позволяет вам предотвратить развертывание на всех узлах DOM в документе с помощью document.expando = false;.

. Одна альтернатива - использовать jshashtable (заявление об отказе: я написал его) для хранения данныхдля текстовых узлов.Это реализация хеш-таблицы, которая позволяет вам использовать любой объект (не только строки) в качестве ключа.

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

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

Я бы попробовал сделать createElement("p") (или любой тип элемента), если вы хотите показать текст.

РЕДАКТИРОВАТЬ: Это неправильно. См. Ответ Тима Дауна для решения.

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