Есть ли функция jquery для перечисления атрибутов?

Есть ли функция jquery, которая может отображать атрибуты, которые имеет объект? Я пытаюсь использовать его, чтобы понять, почему я не могу установить атрибут "fill" in

$(document).ready(function(){
 $('#emitterButton').click(function(){
 $(this).attr({'fill':BUTTON_COLOR_PRESSED});
 });
});

Для справки, #emitterButton относится к

emitterButton = canvas.circle(emitter_center_x,emitter_center_y,BUTTON_RADIUS)
 .attr({'fill':BUTTON_COLOR_UNPRESSED})
 .attr({'id':'emitterButton'});

где холст - холст Рафаэля.

1 ответ

Кажется, вы сбиты с толку двумя ароматами объектов обматывания узлов. В вашем коде emitterButton ссылается на объект Рафаэля, созданный canvas.circle, имеющий attr как метод, доступный для изменения его состояния.

Но внутри обработчика события $(this) предоставит вам объект jQuery. По совпадению, он также имеет метод attr но он изменяет только базовый атрибут узла DOM без запуска соответствующего события.

Решение состоит в том, чтобы снова найти соответствующий объект по idпомощью метода Raphael Paper.getById(id)):

$('#emitterButton').click(function(){
 canvas.getById('emitterButton')
 .attr({'fill':BUTTON_COLOR_PRESSED});
});

... или, а иногда и намного лучше, просто кешируйте объект:

$('#emitterButton').click(function(){
 emitterButton.attr({'fill':BUTTON_COLOR_PRESSED});
});

Последнее, но не менее важно, вы можете просто присоединить обработчик кликов к объекту Рафаэля (через метод Element.click()).

Это решает проблему в коде. ) Для полноты ответа ответ на ваш оригинальный вопрос прост - если у вас есть объект jQuery, хранящийся в $el, вы можете получить доступ к списку его атрибутов с помощью этих обозначений:

$el[0].attributes

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

licensed under cc by-sa 3.0 with attribution.