2011-04-26 53 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測試了它。

相關問題