首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高级图表再流在类选择器上不工作。

高级图表再流在类选择器上不工作。
EN

Stack Overflow用户
提问于 2014-08-01 10:38:14
回答 1查看 4.7K关注 0票数 4

是否有人尝试过在类选择器上而不是在id选择器上运行()函数?

参见示例,其中我有两个图表和一个按钮,以切换其包含的div大小。我还有两个按钮,一个按id重放图表,另一个按类重放图表。

请注意,使用类选择器的选项似乎没有重新显示两个图表,它只使用该类重新生成第一个元素。

http://jsfiddle.net/deN74/1/

HTML:

代码语言:javascript
复制
<script src="http://code.highcharts.com/highcharts.js"></script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>

<div style="width: 600px">
    <div id="container1" class="needreflow" style="width: 400px; height: 300px; margin: 1em; border: 1px solid gray"></div>
    <div id="container2" class="needreflow" style="width: 400px; height: 300px; margin: 1em; border: 1px solid gray"></div>
</div>
<button id="set-div-size" class="autocompare">Toggle container size</button>
<button id="reflow-chart-byid" class="autocompare">Reflow charts by id selector</button>
<button id="reflow-chart-byclass" class="autocompare">Reflow charts by class selector</button>

联署材料:

代码语言:javascript
复制
$(function () {
    $('#container1').highcharts({
        xAxis: {
            categories: ['Jan', 'Feb', 'Mar']
        },

        series: [{
            data: [29.9, 71.5, 106.4]
        }]

    });
    $('#container2').highcharts({
        xAxis: {
            categories: ['Jan', 'Feb', 'Mar']
        },

        series: [{
            data: [29.9, 71.5, 106.4]
        }]

    });

    var wide = false;
    $('#set-div-size').click(function () {
        $('#container1').width(wide ? 400 : 500);
        $('#container2').width(wide ? 400 : 500);
        wide = !wide;
    });
    $('#reflow-chart-byid').click(function () {
        $('#container1').highcharts().reflow();
        $('#container2').highcharts().reflow();
    });
        $('#reflow-chart-byclass').click(function () {
        $('.needreflow').highcharts().reflow();
    });
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-01 15:14:12

这是一个很好的观察,我相信这取决于.highcharts()函数是如何实现的。正如所观察到的,它不影响类选择器的多个元素,因为它只在单个元素上工作。

如果您在源代码 (第971-1005行)中查看该函数,您可以看到以下代码:

代码语言:javascript
复制
/**
 * Register Highcharts as a plugin in the respective framework
 */
$.fn.highcharts = function () {
    ...

    // When called without parameters or with the return argument, get a predefined chart
    if (options === UNDEFINED) {
        ret = charts[attr(this[0], 'data-highcharts-chart')];
    }

    ...
    return ret;
}

返回值将始终是this[0],这意味着无论您选择多少个元素,它都将返回第一个元素,并且根本不处理多个元素。

reflow也只执行一次,因为highcharts-function不返回reflow-function可以操作的列表。如果是的话,我猜reflow函数也不支持多个元素。

一种解决方案可能是使用.each来迭代使用选择器找到的每个容器,例如(JSFiddle):

代码语言:javascript
复制
$('.needreflow').each(function() { $(this).highcharts().reflow(); });
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25078378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档