【问题标题】:Is there a way to make Internet Explorer understand this.style.setProperty?有没有办法让 Internet Explorer 理解 this.style.setProperty?
【发布时间】:2011-08-13 08:28:35
【问题描述】:

我已经开始使用优秀的 D3.js 数据可视化库 (http://mbostock.github.com/d3/)。

结果在 Firefox 和 Chrome 中运行良好,但在 IE 中不行。一个问题似乎是 D3 大量使用 this.style.setProperty 和 this.style.removeProperty,IE 无法识别。

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

【问题讨论】:

  • 听起来像是 .attr('propname', 'value') 将在 JQuery 中完成的事情的类型。也许您可以通过破解 d3 库中 setProperty 的定义来创建某种类型的包装器。 JQuery 跨浏览器工作。

标签: javascript d3.js cross-browser


【解决方案1】:

我一直在与相同的错误作斗争,当您想更改样式时,您可以使用以下模式简单地解决它。

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

该值绝对有必要始终为字符串。否则你会在 IE9 中得到一个奇怪的字符错误,因为它只能处理字符串。

我使用 D3JS 3.2.8 对其进行了测试。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 感谢您 - 尝试了较新的版本,但没有成功。为了澄清,我使用 d3 来滚动页面上的 HTML 元素。已在评论中链接到下面的当前版本。
    • 相关提交为c2e3735;我认为版本 2.0.5。但这只会增加对 IE9 的支持。我相信 OP 询问的是 IE8 或更低版本,这不是官方支持的。但是,有a workaround
    【解决方案3】:

    .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
    }
    

    顺便说一句,向元素添加/删除类比将信息附加到“样式”更快。

    【讨论】:

    • 好主意,但遗憾的是我的情况并非如此。我正在使用数据驱动的函数来转换元素,例如定位。添加和删​​除类不会这样做。 d3 在内部使用 style.setProperty 来执行此操作。
    • 你能举个例子吗?因为我根据数据定位我的元素(路径、多边形......),然后使用变换/翻译移动它们。它在 IE9 中对我来说很好。
    • 对不起 - 应该澄清我使用 d3 来操作 HTML 而不是 SVG 元素。你可以看到我在patientstori
    猜你喜欢
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多