Как элегантно прочитать этот элемент объекта DOM, не используя jQuery find ()?

0

Я получил некоторые 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] из-за читаемости и потенциальных будущих изменений.

Есть идеи?

  • 0
    Почему бы не использовать силу селектора $('field > name', data) ?
  • 0
    являются ли data элементом field ? также find не проблема, если вы не имеете дело со структурой с 10 тысячами элементов
Показать ещё 3 комментария
Теги:
dom

3 ответа

1

Я дам вам ответ, который вообще не использует jQuery! Как это?

Ваша проблема заключается в поиске структуры XML. Таким образом, вы преобразовали его в дерево DOM, но теперь вы беспокоитесь о проблемах с производительностью при перемещении дерева.

Решение прост: не конвертируйте свой XML в HTML, не конвертируйте его в литерал объекта JavaScript и не сработайте с ним. Это будет самый простой и самый эффективный. Для ссылки на преобразование XML в литерал объекта: XML-объект JavaScript

Теперь вы можете использовать все инструменты, предлагаемые JavaScript для работы с вашими данными, а также избегать проблем с эффективностью jQuery/DOM.

0
  


    function alertit(jqueryObject) {
      if (jqueryObject.length === 0) return;

      jqueryObject.each(function() {
          alert(this.nodeName.toLowerCase());
      });

      alertit(jqueryObject.children());
    }

    alertit($(xml));

  • 0
    это полезно для тебя?
0

также попробуйте это

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());
    });
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню