HumbleSoftware / Flotr2

Graphs and Charts for Canvas in JavaScript.
http://www.humblesoftware.com/flotr2/
MIT License
2.45k stars 529 forks source link

Bug IE: Flotr.DOM.node : use removeChild to detach the element from the DIV, and prevent to be removed when div.innerHTML is called #300

Open Kobee1203 opened 9 years ago

Kobee1203 commented 9 years ago

I try to define my own legend container.

But in IE, when the following lines is called, the created table is empty :

if(legend.container){
  table = D.node(table);
  this.legend.markup = table;
  D.insert(legend.container, table);
}

The problem comes from the D.node function (Flotr.DOM.node) that retrieves the DOM element (variable n) after adding it to a DIV. However, when the line DIV.innerHTML = ''; is called, the element 'n' is emptied.

One solution would be to detach the element from the DIV using removeChild:

node: function(html) {
    var div = Flotr.DOM.create('div'), n;
    div.innerHTML = html;
    /* FIX : IE: use removeChild to detach the element from the DIV, and prevent to be removed when div.innerHTML is called */
    n = div.removeChild(div.children[0]);
    div.innerHTML = '';
    return n;
  }