Я только что установил IE10 на своем Windows 7, и я заметил, что даже если я рад, что XML-запросы от AJAX-запросов теперь совместимы с документами DOM, довольно простая функция типа document.evaluate
по-прежнему не поддерживается.
Чем хуже то, что эти XML файлы не являются обычными объектами Microsoft IXMLDocument
, узлы больше не поддерживают selectNodes
и selectSingleNode
. В конце концов, похоже, что IE10 не поддерживает DOM Level 3 XPath или MSpath Xpath.
Конечно, я могу использовать querySelector
и querySelectorAll
, но я не хочу потерять совсем немного обратной совместимости.
В противном случае, вы можете запросить документ MSXML с помощью этой строки
try {xhr.responseType = "msxml-document";} catch(e) {}
как указано здесь, но я думаю, что было бы неплохо иметь дело с, наконец, стандартным документом DOM в IE.
Итак, есть ли способ использовать XPath в IE10 со стандартными документами DOM?
ОБНОВЛЕНИЕ 26/7/2013 IE11 еще не стабилен, но он по-прежнему не поддерживает document.evaluate
. Если он не будет поддерживать его в стабильном выпуске, я сомневаюсь, что он когда-нибудь его поддержит. Излишне говорить, что это смешно.
Я понимаю, что вы можете использовать querySelector
/All
в узлах DOM, но он не поддерживается в IE9 и ниже, которые все еще довольно часто используются, и в любом случае XPath более эффективен, чем селектор.
К счастью (если вы можете это сказать), вы все равно можете установить xhr.responseType = "msxml-document"
. На мгновение я боялся, что ты больше не можешь этого делать...
ОБНОВЛЕНИЕ 23/11/2013 Теперь IE11 стабилен, но, к сожалению, он не поддерживает document.evaluate
. Поскольку тяжелые XML-документы используются все меньше и меньше в веб-приложениях в пользу JSON или других форматов световых обозначений, это становится менее проблемой, но все же.
Установка свойства responseType
по-прежнему предоставляет устаревшие документы XML, поэтому ничего не теряется. Я не знаю, сохранится ли это для IE12.
UPDATE 15/8/2015 Звучит смешно прямо сейчас, но Edge теперь поддерживает document.evaluate
. Только когда (почти) все переключилось на JSON для обмена данными. Ну, лучше поздно, чем никогда. Думаю.