Анализатор XML jQuery не получает атрибут 'dir'

Я использую jQuery для анализа XML, который получен через ajax, однако я обнаружил проблему / ошибку с использованием фактического ввода XML.

Рассмотрим следующий пример:

var $line = $('<example dir="value">Example Text</example>'), dir = $ line.attr ("dir");
console.info ("dir:", dir);

Этот пример должен возвращать значение, вместо этого он возвращает пустую строку. Попробовал приведенный выше код с другим именем атрибута, и он возвращает правильное значение.

Является ли 'dir' недопустимым атрибутом? Или это ошибка в jQuery? Просто интересуюсь...

3 ответа

Решение

dir = $line.get(0).getAttribute("dir") работает просто отлично.

Собираюсь опубликовать этот вопрос на странице обсуждения jQuery.

$(markup) анализирует как HTML, а не XML, давая вам HTMLUnknownElement с tagName example, dir является существующим атрибутом HTML, который может иметь только значения rtl или же ltr, Все остальное игнорируется, поэтому пользовательский атрибут не читается в свойстве DOMdir,

(Вопреки тому, что вы могли ожидать от названия, jQuery's attr() на самом деле метод обычно представляет доступ к свойству DOM, а не доступ к атрибутам HTML, хотя он позволяет использовать имена атрибутов HTML в качестве псевдонимов.)

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

Получить браузер для разбора XML не так просто, как вы думаете. Получение XML-документа, возвращенного XMLHttpRequest (ajax()) работает везде, поэтому, если вы можете, переместите XML в ответ AJAX.

В противном случае, получение синтаксического анализатора XML для чтения строки не одинаково во всех браузерах (а старые браузеры вообще не могут этого сделать). В IE вы должны использовать new ActiveXObject('Microsoft.XMLDOM'); в других браузерах вы часто получаете new DOMParser(); если это не удастся, вы можете попытаться document.implementation.createDocument().loadXML(),

Потому что я не думаю, что это будет проанализировано, попробуйте это

var $line = $('<example></example>').attr('dir','value').value('Example Text');
Другие вопросы по тегам