Я столкнулся с небольшим провалом с моим кодом - ниже мой код:
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() на что-то более полезное (нужно определить каждый отдельно).
Создаст новый поток, если у меня возникнут проблемы и свяжу его здесь.
(связанный с этим поток: возвращаемые массивы и дочерние узлы)
Вы всегда можете извлечь узлы 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());
});
actionsAllowed
- это, вероятно, имя тега, а не класса.