Получение th ChildNodes из объектной переменной

0

Я столкнулся с небольшим провалом с моим кодом - ниже мой код:

var actionsAllowed = $(packet).find('actionsAllowed');

Это возвращает мне следующее в консоли firebug:

Object [actionsAllowed]

Нажатие "actionsAllowed" приводит меня в пакет и в правильный раздел, где я вижу два перечисленных действия.

Я могу расширить объект и в итоге увидеть следующее:

Object[actions]

0
    actions

remove
    remove()

attributes
    []

baseURI
    "http://localhost:9000/testget#"

childElementCount
    2

childNodes
    NodeList[ActionOne, ActionTwo]

0
    ActionOne

1
    ActionTwo

length
    2

item
    item()

iterator
    iterator()

__proto__
    NodeListPrototype { item=item(), iterator=iterator()}

Поэтому под NodeList я вижу правильные действия.

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

Моя попытка получить регистрацию каждого ребенка:

function getActionsAllowed() {
    var children = actionsAllowed.childNodes;
        for (var i = 0; i < children.length; i++) {
            console.log(children);
        }
}

Проблема заключается в том, что ".childNodes" продолжает возвращаться как "undefined".

Есть ли другой, лучший способ сделать это? Или это правильно, но я допустил ошибку?

Спасибо.

С уважением,

Гэри Шергилл

РЕДАКТИРОВАТЬ:

рабочий код всего за один результат:

var currentState = $(packet).find('currentState').text();
var actionsBanned = $(packet).find('actionsBanned').text();

EDIT 2:

Обновлен код:

$(packet).find('actionsAllowed').each(function () {
    var children = this.childNodes;
        for (var i = 0; i < children.length; i++) {
        var action = children[i].nodeName
            console.log(action);
        }
});

Это работает =) Оно регистрирует каждое действие по одному, поэтому оно работает. Просто вопрос, как изменить console.log() на что-то более полезное (нужно определить каждый отдельно).

Создаст новый поток, если у меня возникнут проблемы и свяжу его здесь.

(связанный с этим поток: возвращаемые массивы и дочерние узлы)

  • 0
    Вы можете предоставить объект как таковой?
  • 0
    Я вставил то, что показывает объект, когда я вхожу в него. Это, конечно, не все, большое количество строк, но показаны узлы внутри «действий», чего должно быть достаточно?
Показать ещё 3 комментария
Теги:
list
children
nodes

1 ответ

1
Лучший ответ

Вы всегда можете извлечь узлы DOM из объекта jQuery, используя toArray или get.

var actionsAllowed = $(packet).find('actionsAllowed').get();

Но это вообще не необходимо, так как сам объект jQuery реализует обширный API для управления узлами.

Например, петля над узлами

$(packet).find('actionsAllowed').each(function () {
    //looping over childnodes
    $(this).children().each(function () {
        console.log($(this).text());
    });
});

Если вы просто хотите, чтобы дочерние элементы ActionsAllowed узлов напрямую, вы также можете сделать:

$(packet).find('actionsAllowed > *').each(function () {
    console.log($(this).text());
});
  • 0
    Я подозреваю, что он анализирует XML, поэтому actionsAllowed - это, вероятно, имя тега, а не класса.
  • 0
    @ Бармар Да, это правильное предположение. Я добавил комментарий, чтобы игнорировать мои модификации, если мои собственные предположения неверны.
Показать ещё 9 комментариев

Ещё вопросы

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