Анализатор XML jQuery не получает атрибут 'dir' - PullRequest
0 голосов
/ 26 августа 2010

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 26 августа 2010

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

(В отличие от того, что вы можете ожидать от имени, 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().

1 голос
/ 26 августа 2010

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

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

0 голосов
/ 26 августа 2010

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

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