Анализатор 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');