Пользовательские атрибуты на узлах RaphaelJS в IE8

У меня есть сценарий, подобный этому, который добавляет базовый прямоугольник к бумажному объекту в RaphaelJS, а затем устанавливает некоторые настраиваемые атрибуты на прямоугольник:

var furniture = paper
  .rect(0, 0, 100, 200)
  .attr({
    fill: '#ccc'
  })
;


furniture.node.id = 'some-id';
$(furniture.node).attr('class','draggableFurniture');
$(furniture.node).attr('productId','1234');
$(furniture.node).attr('title','Some title');
$(furniture.node).attr('price','123.99');

Это отлично работает в IE9 и Firefox / Chrome и т. Д., Но не работает в IE8 или 7, предположительно потому, что эти браузеры используют VML, а не SVG, и предположительно VML не имеет структуры DOM, которую можно использовать как SVG.

Мне было интересно, как можно согласованно добавлять мои настраиваемые атрибуты в эти объекты во всех браузерах (ну, включая IE8 и 7 по крайней мере)?

Спасибо, ребята!


person Dan    schedule 30.01.2012    source источник


Ответы (2)


Сортировано! В API Рафаэля есть метод под названием «данные» (http://raphaeljs.com/reference.html#Element.data), который позволяет устанавливать пользовательские пары ключ / значение для каждого элемента на бумаге. Хотя он не принимает массив элементов, этот метод можно вызывать несколько раз, поэтому каждый атрибут может быть добавлен таким образом. Пример можно увидеть здесь: http://www.irunmywebsite.com/raphael/additionalhelp.php?v=2&q=element.data#pagetop

person Dan    schedule 30.01.2012

Я думаю, что лучше всего это сделать с getById() Рафаэля. Вы можете назначить внутренний идентификатор. Здесь я ответил на вопрос, в котором у вас есть пример того, как это сделать.

добавление идентификаторов к объектам raphael

Пока!

person limoragni    schedule 30.01.2012
comment
Спасибо, но это не УСТАНАВЛИВАЕТ идентификатор и не касается каких-либо других настраиваемых атрибутов. Я пока не могу отметить это как решение, но мой второй пост - это решение, которое я искал, с использованием метода данных для каждого настраиваемого атрибута. Все проверено и работает отлично. В любом случае спасибо. - person Dan; 31.01.2012
comment
Нет, именно так вы получаете элемент по его идентификатору, который вы можете установить, как показано в сообщении, которое я рекомендовал вам прочитать: element.id = 'Idofelement'. Как только у вас будет этот идентификатор, вы получите элемент с getById ('Idofelement'). Это похоже на использование данных, но более прямолинейно. - person limoragni; 01.02.2012