无法使用jVectorMap将区域标签呈现为HTML

时间:2016-03-14 08:30:34

标签: javascript jvectormap

我把我的代码写成了一个小小提琴:http://jsfiddle.net/V8dyd/266/

我可以在地图上将区域标签渲染为字符串,但无法将它们渲染为HTML。

$(function(){
    var Jsondata = {
        LK: " Region :  Asia,  Feedback : 228, Good : 34.00%, Normal : 33.00%, Bad : 30.00% ",
        IN: "Total Responses : 228"
    };

    var map = $('#map').vectorMap({
        map: 'world_mill_en',
        zoomMin: 1,
        zoomMax: 1,
        regionLabelStyle: {
            initial: {
                fill: '#B90E32'
            },
            hover: {
                fill: 'black'
            }
        },
        labels: {
            regions: {
                render: function (code) {
                    if (code==="LK") {  
                        var a = Jsondata[code];
                        var array = a.split(',');
                        var s = "<html><body><div><small>" + array[0]  +"</small><br><small>" + array[1] + "</small><br><small>" + array[2] + "</small><br><small>" + array[3] + "</small></div</body></html>";
                        var htmlObject = document.createElement('div');
                        htmlObject.innerHTML = s;
                        return htmlObject;
                        // return  s
                    }
                }
            }
        }
    });
});

1 个答案:

答案 0 :(得分:0)

标签使用svg TEXT-Tags呈现,不允许使用HTML。 在当前版本中,这不受支持,但我在Region Function中使用Hook来实现换行: https://github.com/bjornd/jvectormap/blob/master/src/region.js

像这样:

 jvm.Region = function(config){
      var bbox,
          text,
          offsets,
          labelDx,
          labelDy;

      this.config = config;
      this.map = this.config.map;

      this.shape = config.canvas.addPath({
        d: config.path,
        'data-code': config.code
      }, config.style, config.canvas.rootElement);
      this.shape.addClass('jvectormap-region jvectormap-element');

      bbox = this.shape.getBBox();

      myHook(bbox, text, offsets, config);
      return false;
      ...
 }

 function myHook(bbox, text, offsets, config){
     // Create your own Label like this
     text = this.getLabelText(config.code);
     if (this.config.label && text) {
        offsets = this.getLabelOffsets(config.code);
        this.labelX = bbox.x + bbox.width / 2 + offsets[0];
        this.labelY = bbox.y + bbox.height / 2 + offsets[1];
        this.label = config.canvas.addText({
            text: text,
            'text-anchor': 'middle',
            'alignment-baseline': 'central',
            x: this.labelX,
            y: this.labelY,
            'data-code': config.code
        }, config.labelStyle, config.labelsGroup);
        this.label.addClass('jvectormap-region jvectormap-element');
    } 
 }

这不是最好的方式,但也许对你有帮助!