是否有一个jquery函数来列出属性?

时间:2014-07-01 13:59:47

标签: javascript jquery raphael

是否有可以列出对象属性的jquery函数?我试图用它来了解为什么我没有设置属性" fill"在

$(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'});

,canvas是拉斐尔画布。

1 个答案:

答案 0 :(得分:3)

您似乎对两种节点包装对象感到困惑。在您的代码中,emitterButton引用Raphael对象 - 由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});
});

最后,但绝对不是最不重要的,您只需将点击处理程序附加到Raphael的对象(通过Element.click()方法)。


这解决了代码中的实际问题。 )为了完整性,原始问题的答案很简单 - 如果您在$el中存储了jQuery对象,则可以使用此表示法访问其属性列表:

$el[0].attributes

...根据the docs是一个键值对的字符串,表示有关该节点的任何信息