Что я не пытаюсь сделать:
- Просто "читайте" XML в IE, используя jQuery. Был там, сделал это. Работает по большей части.
- Загрузка XML через AJAX. Это устаревшая система, использующая XML в скрытом поле (о да, детка!) Между постбеками для хранения структуры данных мастера. Переписать это было бы отстой.
Что я пытаюсь сделать:
- Манипулирование XML-документом с использованием jQuery в IE
- Используйте один и тот же код во всех браузерах, используя встроенную функциональность jQuery
С чем бы я был в порядке:
- Переопределение / перегрузка одних и тех же методов jquery, чтобы заставить их работать в IE при манипулировании XML DOM.
Это просто не работает, и я чувствую, что это невозможно в 100% -ном кросс-браузерном использовании старых методов jQuery.
Показательный пример:
<code><!DOCTYPE html>
<html>
<head>
<title>IE Sucks</title>
<script src="Scripts/jquery-1.5.min.js" type="text/javascript"></script>
<script type="text/javascript">
var xml =
'<Browsers>' +
'<CoolBrowsers>' +
'<Browser name="Opera"></Browser>' +
'<Browser name="Chrome"></Browser>' +
'<Browser name="Firefox"></Browser>' +
'</CoolBrowsers>' +
'<BadBrowsers>' +
'<Browser name="IE6"></Browser>' +
'</BadBrowsers>' +
'</Browsers>';
$(function () {
$("#xml").text(xml);
var uncoolBrowser = $("<Browser />").attr("name", "IE7");
// In 1.5, using this...
var $xml = $($.parseXML(xml));
// Nope. Works everywhere else, though!
// var $xml = $(xml);
// Throws a "Type mismatch"
// Works everywhere except IE
// This is case sensitive (??? WTF ???)
// Lowercase "badbrowsers" nothing happens
// Uppercase "BADBROWSERS" nothing happens
// Best part? $xml.find("BadBrowsers").length === 1
$xml.find("BadBrowsers").append(uncoolBrowser);
// Only way to output XML in IE
$("#result").text($xml[0].xml);
// Fuggetaboutit
// Technically, it does work in IE but not when using $.parseXML()
// $("#result").text($("<div></div>").append($xml.clone()).html());
});
</script>
</head>
<body>
<pre id="xml">
Возможно ли это? Может ли этот простой сценарий быть реализован или IE просто оставил нас всех? $(xml).everything
и т. Д. Работает в FF, Opera, Chrome и Safari.
Обновление
Можно использовать магию вуду.
Я создал плагин jQuery , который заботится о согласовании различий между различными браузерами, обрабатывающими XML. Я также сделал функцию .xml()
, основанную на аналогичном коде в другом месте, хотя мой исправляет проблему только с IE. Это работает во всех браузерах, IE7 и IE8 точно, не может протестировать IE6.
Я разместил это на своем github. Если у кого-то есть предложения или улучшения, дайте мне знать. Есть несколько вещей, с которыми я уже столкнулся, но я исправлял их, сталкиваясь с ними.