Я получил некоторые XML-данные, проанализировал его в dom-объект, чтобы я мог искать и получать значения с помощью jQuery.
Что-то вроде этого:
<field>
<name>Jesus</name>
<group>God</group>
<blah>Hello World</blah>
</field>
В моем js я использовал each()
для прокрутки поля:
data.find('field').each(function() {
$(this).find("group").text();
}
Я мог бы использовать find()
для получения каждого поля и содержимого, но я не хочу использовать find, поскольку он может стать дорогим. Я просмотрел API jQuery, я не думаю, что есть функция, которая может позволить мне сделать что-то вроде " getElement('name')
или children('name')
или next('name')
и т.д.
Я не хочу использовать индекс, например $(this)[0].childNodes[0]
из-за читаемости и потенциальных будущих изменений.
Есть идеи?
Я дам вам ответ, который вообще не использует jQuery! Как это?
Ваша проблема заключается в поиске структуры XML. Таким образом, вы преобразовали его в дерево DOM, но теперь вы беспокоитесь о проблемах с производительностью при перемещении дерева.
Решение прост: не конвертируйте свой XML в HTML, не конвертируйте его в литерал объекта JavaScript и не сработайте с ним. Это будет самый простой и самый эффективный. Для ссылки на преобразование XML в литерал объекта: XML-объект JavaScript
Теперь вы можете использовать все инструменты, предлагаемые JavaScript для работы с вашими данными, а также избегать проблем с эффективностью jQuery/DOM.
function alertit(jqueryObject) { if (jqueryObject.length === 0) return; jqueryObject.each(function() { alert(this.nodeName.toLowerCase()); }); alertit(jqueryObject.children()); } alertit($(xml));
также попробуйте это
var xmlData = "<field><name>Jesus</name><group>God</group><blah>Hello World</blah></field>";
$(document).ready(function () {
var data = $.parseXML(xmlData);
$(data).each(function (i, node) {
alert($(node).text());
});
});
$('field > name', data)
?data
элементомfield
? такжеfind
не проблема, если вы не имеете дело со структурой с 10 тысячами элементов