javascript - HTML 内容到 Javascript 代码

标签 javascript html highcharts

我正在尝试获取 div 标签中的内容并将其转换为 Javascript 代码。这样做的原因是获取 div 信息并将其转换为 Highchart 数据系列。

HTML 内容

<div id="data">{name: 'Point 1',x: Date.UTC(2014, 11, 1),x2: Date.UTC(2014, 11, 8),y: 0},{name: 'Point 2',x: Date.UTC(2014, 12, 1),x2: Date.UTC(2014, 12, 8),y: 0},</div>

Javascript/片段内容

$(function () {
var newdata = $("#data");

     (function (H) {
        var defaultPlotOptions = H.getOptions().plotOptions,
            columnType = H.seriesTypes.column,
            each = H.each;

        defaultPlotOptions.xrange = H.merge(defaultPlotOptions.column, {});
        H.seriesTypes.xrange = H.extendClass(columnType, {
            type: 'xrange',
            parallelArrays: ['x', 'x2', 'y'],
            requireSorting: false,
            animate: H.seriesTypes.line.prototype.animate,

            /**
             * Borrow the column series metrics, but with swapped axes. This gives free access
             * to features like groupPadding, grouping, pointWidth etc.
             */
            getColumnMetrics: function () {
                var metrics,
                    chart = this.chart;

                function swapAxes() {
                    each(chart.series, function (s) {
                        var xAxis = s.xAxis;
                        s.xAxis = s.yAxis;
                        s.yAxis = xAxis;
                    });
                }

                swapAxes();

                this.yAxis.closestPointRange = 1;
                metrics = columnType.prototype.getColumnMetrics.call(this);

                swapAxes();

                return metrics;
            },
            translate: function () {
                columnType.prototype.translate.apply(this, arguments);
                var series = this,
                    xAxis = series.xAxis,
                    metrics = series.columnMetrics;

                H.each(series.points, function (point) {
                    var barWidth = xAxis.translate(H.pick(point.x2, point.x + (point.len || 0))) - point.plotX;
                    point.shapeArgs = {
                        x: point.plotX,
                        y: point.plotY + metrics.offset,
                        width: barWidth,
                        height: metrics.width
                    };
                    point.tooltipPos[0] += barWidth / 2;
                    point.tooltipPos[1] -= metrics.width / 2;
                });
            }
        });

        /**
         * Max x2 should be considered in xAxis extremes
         */
        H.wrap(H.Axis.prototype, 'getSeriesExtremes', function (proceed) {
            var axis = this,
                dataMax = Number.MIN_VALUE;

            proceed.call(this);
            if (this.isXAxis) {
                each(this.series, function (series) {
                    each(series.x2Data || [], function (val) {
                        if (val > dataMax) {
                            dataMax = val;
                        }
                    });
                });
                if (dataMax > Number.MIN_VALUE) {
                    axis.dataMax = dataMax;
                }
            }
        });
    }(Highcharts));


    // THE CHART
    $('#container').highcharts({
        chart: {
            type: 'xrange'
        },
        title: {
            text: 'Highcharts X-range study'
        },
          plotOptions: {
        series: {
            events: {
                mouseOver: function () {
                    var cur = this;
                    Highcharts.each(this.chart.series, function (series) {
                        if (series !== cur) {
                            series.group.animate({
                                opacity: 0.2
                            }, {
                                duration: 150
                            });
                        } else {
                            series.group.animate({
                                opacity: 1
                            }, {
                                duration: 150
                            });
                        }   
                    });
                },
                mouseOut: function () {
                    this.group.animate({
                        opacity: 1
                    }, {
                        duration: 150
                    });
                }   
            }
        }
    },
        xAxis: {
            type: 'datetime'
        },
        yAxis: {
            title: '',
            categories: [],
        },
        series: [$(newdata).text()]
        }]

    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<div id="data">{name: 'Point 1',x: Date.UTC(2014, 11, 1),x2: Date.UTC(2014, 11, 8),y: 0},{name: 'Point 2',x: Date.UTC(2014, 12, 1),x2: Date.UTC(2014, 12, 8),y: 0},</div>

它将内容提取为文本,而不将其创建为代码。这可以吗?

最佳答案

如果 #data 元素的所有内容格式正确,您实际上要做的就是获取该元素的内部 html 并将其解析为 JSON。

// This is the contents of #data as a String
var data_as_a_string = document.getElementById("data").innerHTML;

// And here it is "in javascript" as an Object
var data_as_an_object = JSON.parse( data_as_a_string );

关于javascript - HTML 内容到 Javascript 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34031137/

相关文章:

javascript - JS Highchart 导入 CSV 数据

javascript - 在 NodeJs 中将 Uint8Array 转换为 Uint16Array

javascript - getImageData 给出 "undefined is not a function"错误

javascript - 基于 HTML 5 的移动开发的最佳框架是什么?

javascript - 了解 javascript 事件处理和 ajax 请求

javascript - Highcharts : trouble with axis Label

javascript - PHP INSERT 准备好的语句不使用 ajax 插入

Javascript 回调函数触发两次

php - 注册符号害死我了

Javascript事件监听器需要点击两次才能工作