Добавление элемента SVG к элементу HTML с appendChild - не удается в IE9? - PullRequest
0 голосов
/ 30 марта 2012

Я загружаю файл SVG с помощью Ajax-запроса прототипа, добавляю в него класс и идентификатор, а затем помещаю его в div. Моя проблема возникает при добавлении его в DOM:

onSuccess: function(response) { 

    var svgElement = response.responseXML.documentElement;
    svgElement.setAttribute("id", "someId");
    svgElement.setAttribute("class", "someClass");

    // At this point, everything is fine. I can verify that in IE9,
    // I have a valid svgElement and the id and class have been correctly set.

    var someDiv = $('someDiv');

    someDiv.appendChild(svgElement); // This fails in IE9, but works elsewhere!
    someDiv.insert(svgElement.xml); // This works in IE9, but fails elsewhere!

}

Меня интересуют только лучшие браузеры из этой группы - IE9 - это самый низкий уровень, о котором мне следует беспокоиться.

Любые иды, что случилось? Я временно переключаю методы вставки в зависимости от того, нахожусь ли я в IE или нет, но я хочу докопаться до сути и исправить это правильно.

1 Ответ

1 голос
/ 10 апреля 2012

Я решил проблему " responseXML, находящуюся в другом документе ", просто создав новый документ во всех случаях с помощью responseText:

onSuccess: function(response) { 

    var svgDoc;

    if (window.DOMParser) {
      var domParser = new DOMParser();
      svgDoc = domParser.parseFromString(response.responseText, "text/xml");
    } else {
      svgDoc = new ActiveXObject("Microsoft.XMLDOM");
      svgDoc.async = false;
      svgDoc.loadXML(response.responseText);
    }

    var svgElement = svgDoc.documentElement;

}

Намного проще и чище, чем импортировать документ (и все связанные с этим проблемы), если вы спросите меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...