Ошибка синтаксического анализа / манипуляции с jQuery XML в IE8 - PullRequest
1 голос
/ 29 марта 2012

Я загружаю файл XML, используя jQuery $ .get. после загрузки содержимого я могу манипулировать им и добавлять узлы xml к своим собственным элементам с помощью .append (). это работает на Chrome и Firefox, но не на IE8.

пример XML-файла:

<THEMES>
  <THEME id="city">
    <ASSETS ui="game/city">
        <ASSET package_id="title_screen"        file="title_screen.swf" />
        <ASSET package_id="backgrounds"          file="cartoon_buildings.swf" />
        <ASSET package_id="stand"                file="stand.swf" />
    </ASSETS>
  </THEME>  
</THEMES>

Мне нужно отсоединить все узлы ТЕМ и прикрепить их к моему собственному объекту.

вот суть моего кода:

    var themes = $("<themes></themes>");
    $.get('url/themes.xml', function(data, textStatus, jqXHR) {
        var xml = data;         
        themes.append($(xml).children("themes").children('theme'));
    }, 'xml');

Ошибка возникает в строке themes.append только в IE, и вот что показывает журнал:

Такой интерфейс не поддерживается

Могу ли я не манипулировать и добавлять элементы XML в IE?

Ответы [ 2 ]

4 голосов
/ 29 марта 2012

Попробуйте сериализовать элемент XML выборки следующим образом:

function xml2Str(xmlNode)
{
  try {
    // Gecko-based browsers, Safari, Opera.
    return (new XMLSerializer()).serializeToString(xmlNode);
  }
  catch (e) {
    try {
      // Internet Explorer.
      return xmlNode.xml;
    }
    catch (e)
    {//Strange Browser ??
     alert('Xmlserializer not supported');
    }
  }
  return false;
}
2 голосов
/ 29 марта 2012

Существует 2 вопроса:

  1. Из документов:

    Запрос (html [, ownerDocument])
    html: Aстрока HTML для создания на лету.Обратите внимание, что это анализирует HTML, , а не XML .

  2. IE, следуя спецификации DOM, не допускает перемещение узлов между документами.

Это исправляет обе проблемы и работает для меня в IE тоже:

    //themes will be a jQuery-Object containing the documentElement
    var themes = $($.parseXML("<themes></themes>").getElementsByTagName('*')[0]);

    $.get('url/themes.xml', function(data, textStatus, jqXHR) {
        var xml = $($.parseXML(data));      
        themes.append(xml.children("themes").children('theme'));        
    }, 'text'
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...