2011-04-26 93 views
4

我已经开始使用优秀的D3.js数据可视化库(http://mbostock.github.com/d3/)。有没有办法让Internet Explorer理解this.style.setProperty?

结果在Firefox和Chrome中很好用,但在IE中没有。有一个问题似乎是D3对this.style.setProperty和this.style.removeProperty的大量使用,而IE并未对其进行识别。

我想知道是否有人知道解决方法或垫片或一些这样的? (我的JavaScript很差,顺便说一句)。

+0

听起来像这样会是.attr('propname','value')在JQuery中完成的事情类型。也许你可以通过在d3库中黑客定义setProperty来创建一些类型的包装。 JQuery的作品crossbrowser。 – 2011-04-26 20:48:56

回答

0

.classed('class',true/false)呢?它的工作原理非常清楚在IE9:

function mouseOver(d, i) { 
    var element = d3.select(this); 
    var alreadyHasClass = element.classed('className'); // boolean 
    element.classed('cssClass', !alreadyHasClass); // set/remove class 
} 

顺便说一句,它的速度更快添加/删除类元素不是追加信息的“风格”。

+0

好主意,但遗憾的是不在我的情况。我正在使用数据驱动函数来转换元素,例如定位。添加和删​​除类不会这样做。 d3在内部使用style.setProperty来执行此操作。 – jamesfm 2011-08-05 08:26:58

+0

你能提供一个例子吗?因为我根据数据定位了我的元素(路径,多边形...),并使用transform/translate在后面移动它们。它在IE9中对我很好。 – 2011-08-05 13:18:14

+0

对不起 - 应该澄清我正在使用d3来操纵HTML而不是SVG元素。你可以在[patientstori](http://patientstori.org.uk/)上看到我建立的东西。 – jamesfm 2011-09-12 12:17:03

0

我相信最新版本2.1.3解决了这个问题。看一看。

+0

感谢你 - 尝试了更新的版本,但没有成功。为了澄清,我使用d3滚动页面上的HTML元素。在评论中已经链接到下面的当前版本。 – jamesfm 2011-09-12 12:18:53

+2

相关的提交是[c2e3735](https://github.com/mbostock/d3/commit/c2e37352ac84eb8b4be89feed90bc2249866f715);我认为版本2.0.5。但是这仅仅增加了对IE9的支持。我相信OP在询问关于IE8或更低版本的内容,这还没有得到官方的支持。不过,[解决方法](https://github.com/mbostock/d3/issues/199#issuecomment-1487129)。 – mbostock 2011-09-15 05:12:11

1

我一直在与相同的错误战斗,你可以简单地解决它,当你想改变风格时使用下面的模式。

element.style("property", "value"); 

这是绝对必要的值始终的字符串。否则,在IE9中会出现奇怪的字符错误,因为它只能处理字符串。

我用D3JS 3.2.8测试了它。

相关问题