0

У меня есть приложение, которое использует D3.js, но я должен сделать его совместимым с IE8 ... Поэтому я использовал R2D3.js, который, кажется, действительно хорошая альтернатива для манипуляции SVG. Но для основных тегов ...Недопустимый аргумент в IE8 с использованием R2D3.js при добавлении тега 'tr'

Я использую его для управления данными внутри таблицы, но когда дело доходит до добавления новой строки, IE говорит:

Line: 8450/Error: Invalid argument.

Я посмотрел вокруг, но я нашел, нет ключ к разгадке.

Вот простой пример моего кода:

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="utf-8"> 
     <!--[if lte IE 8]><script src="r2d3.js" charset="utf-8"></script><![endif]--> 
     <!--[if gte IE 9]><!--> 
     <script src="d3.min.js" charset="utf-8"></script> 
     <!--<![endif]--> 
    </head> 

    <body> 
     <table> 
     </table> 

     <script> 
var dataset = [ 
    { 
     name: 'Foo', 
     age: 42 
    }, 
    { 
     name: 'Bar', 
     age: 21 
    } 
]; 

var table = d3.select('table'); 
table.selectAll('tr').data(dataset) 
    .enter().append('tr') 
    .selectAll('td') 
     .data(function(d) { 
      return [d.name, d.age]; 
     }) 
     .enter().append('td') 
      .text(function(d) {return d}); 
     </script> 
    </body> 
<html> 

Это отлично работает с Firefox, но падает на IE8.

Адрес JSFiddle.

Может ли кто-нибудь помочь мне с этим?

спасибо.

ответ

0

Глядя на исходный код R2D3, его использованием метода addEventListener, который поддерживается только начиная с IE9:

https://github.com/mhemesath/r2d3/search?utf8=%E2%9C%93&q=addeventlistener

https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener

R2D3Element.prototype.addEventListener = function(type, listener) { 
    this.domNode.childNodes[i].r2d3.addEventListener(type, listener); 
} 

Это объясняет, почему он выходит из строя на IE8

+0

Я не очень тщательно анализировал код, но я уверен, что он использует настраиваемую функцию для полирования addEventListener. Вся точка R2D3 заключается в том, что она поддерживает polyfilles IE7/8. – AmeliaBR

+0

Хорошо. Но как это работает с элементом SVG? Должна ли она не срабатывать, как для базового элемента? – ChibiTomo