Почему jQuery each () не запускается с помощью Internet Explorer? - PullRequest
1 голос
/ 09 ноября 2010

У меня есть переменная result со следующим XML:

<Properties>
    <Property>
        <Name>Title</Name>
    </Property>
</Properties>

Затем я использую jQuery 1.4.3 с each():

$('Property', result).each(function () {
    var name = $('Name', this).text();
    alert("Name: " + name);
});

Почему-тоэтот код не запускается под IE8, однако он отлично работает на Firefox 3.6 и Chrome 7. Я пытался найти отчет об ошибке для этого случая, но обнаружил проблемы только со старыми версиями jQuery.

Есть идеи?

Ответы [ 3 ]

1 голос
/ 10 ноября 2010

Это вызвано ошибкой в ​​IE:

if ((properties.length == 0) && (jQuery.browser.msie)) {
    // IE screwing up
    var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.loadXML(result);
    result = xmlDoc;
    properties = $('Property', result);
}
properties.each(function () {
    var name = $('Name', this).text();
    alert("Name: " + name);
});

Хорошие новости - это не происходит в IE9. (Благодаря этому SO ответу ).

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

В IE строка XML должна быть объектом, в то время как другие браузеры допускают тип строки.

У меня была такая же проблема, я получал данные XML с помощью ajax, и каждый из них не работал в IE8, пока я не добавилТип данных в функции AJAX:

$.get('http://url', {'a': 0, 'b': 1}, function(data) {), 'xml');

Выше работает нормально, а ниже:

$.get('http://url', {'a': 0, 'b': 1}, function(data) {));
0 голосов
/ 09 ноября 2010

Почему бы не использовать плагин jQuery.XSLT? Я считаю, что он прекрасно работает во всех браузерах, где работает jQuery

...