javascript - jquery 有没有列出属性的函数?

标签 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 是 Raphael Canvas 。

最佳答案

您似乎对两种类型的节点包装对象感到困惑。在您的代码中,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是一个键值对字符串,表示有关该节点的任何信息

关于javascript - jquery 有没有列出属性的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24512178/

相关文章:

Javascript - 将 byte 转换为 sbyte

javascript - 将动画添加到 RaphaelJS 切换函数

javascript - 如何在 SVG 中实现橡皮擦功能?

javascript - 将文件写入文件系统,然后在 Express 中下载

javascript - 如何在 JavaScript 中编写内联 IF 语句?

javascript - 无法切换文本

javascript - 使用 jQuery 的each 循环数组会导致在创建字符串时在开头出现未定义的值

Ajax 请求中的 jQuery Ajax 请求

javascript - 在 Raphael Javascript 库中渲染 SVG 多边形

javascript - 在 karmaJS 浏览器启动器中抛出 "logged"错误