1

我正在尝试使用 Raphael JS,但 jQuery 选择器似乎不适用于 IE8 中的 Raphael JS。

在 Chrome 和 Firefox 中这有效:

  var paper = ScaleRaphael("test", 500, 500);

  var c = paper.circle(50, 50, 40);

  c.node.setAttribute('class','bluecircle');

  $('.bluecircle').attr({fill: 'blue'});

但是在 Internet Explorer(IE8,它使用 VML 而不是 SVG)中没有显示任何内容。

基本上我要做的是给每个对象一个类,所以我可以使用 Jquery 选择器一次操作所有具有特定类的对象......

有谁知道如何做到这一点,这也适用于 IE ?

4

2 回答 2

4

这与使用类来处理一组对象并不完全相同,但我写了一个针对 Raphael 的补丁以允许命名集。只需调用paper.set('uniqueID', element1, element2, ...). 元素包含一个组数组,每个组都分配给它们,顶部的 Raphael 纸对象有一个由“uniqueID”键控的组字典。

以下测试代码显示了如何将悬停处理程序应用于命名集,并使用悬停回调在悬停时将组的所有成员变为黑色:

var marker1 = paper.circle(50, 20, 10).attr({'fill' : '#ff0000'});
var marker2 = paper.circle(100, 20, 10).attr({'fill' : '#ff0000'});
var marker3 = paper.circle(150, 20, 10).attr({'fill' : '#ff0000'});
var marker4 = paper.circle(200, 20, 10).attr({'fill' : '#ff0000'});

var s = paper.set('setID', marker1, marker2);
s.push(marker3, marker4);
s.pop();

// If marker 1, 2, or 3 is hovered, act on whole group
s.hover(function() {
  for (var i = 0, ii = this.groups.length; i < ii; ++i) {
    var set = this.paper.groups[this.groups[i]];
    for (var j = 0, jj = set.items.length; j < jj; ++j) {
      set.items[j].attr({'fill' : '#000000'});
    }
  }
});
于 2011-08-04T15:39:28.127 回答
0

我会尝试

c.node.className = 'bluecircle';
于 2011-06-08T10:15:41.843 回答