Перебор элементов в переменной

#jquery #loops

#jquery #циклы

Вопрос:

Как будет перебирать HTML, хранящийся в переменной, для тегов ‘ul’? Это то, что у меня есть до сих пор, но alert() даже не срабатывает, я немного растерялся…

 var data = 'HTML';
$('ul', data).each(function(i,v) {
    var theTag = v.tagName;
    var theElement = $(v);
    var theValue = theElement.html();
    alert(theTag 'n' theElement 'n' theValue);
});
 

Спасибо

Ответ №1:

Вы пытаетесь использовать форму $() вызова «селектор, контекст»:

selector
jQuery( selector [, context] ) Строка, содержащая выражение селектора
контекст Элемент DOM, документ или jQuery для использования в качестве контекста

Строка HTML не соответствует ни одной из предполагаемых вещей, context поэтому jQuery не знает, что делать с вашими аргументами, и делает неверное предположение.

Вероятно, вы хотите сделать это так:

 $(data).filter('ul').each(function(i,v) {
    //...
});
 

Демо-версия: http://jsfiddle.net/ambiguous/gxGB8 /

Или, если вы не знаете, на каком уровне <ul> будут элементы, оберните HTML в a <div> и используйте find вместо filter :

 $('<div>'   data   '</div>').find('ul').each(function(i, v) {
    //...
});
 

Демонстрация: http://jsfiddle.net/ambiguous/tM4ua /

Ответ №2:

.val() возвращает значение ввода формы.
Это не работает с произвольными элементами.

Вы хотите .text() или .html() .

РЕДАКТИРОВАТЬ: чтобы найти элементы в строке HTML, вы должны написать $(html).find('ul')

Комментарии:

1. Спасибо, но это все равно не работает. Предупреждение даже не срабатывает.

Ответ №3:

Попробуйте удалить область контекста данных из вашего селектора ul

Комментарии:

1. Если бы я это сделал, он бы перебирал документ, а не переменную.

Ответ №4:

Попробуйте это:

 $('ul').each(function() {
    // Gets underlying element object
    var theElement = $(this).get(0);

    var theTag = theElement.tagName;

    // Can also use .text() if you want just the textual content
    var theValue = $(this).html();

    // theElement can't be printed, it's an object
    alert(theTag 'n' theValue);
});
 

Я предполагаю, что здесь вам нужно содержимое нескольких <ul> тегов, а не <li> части одного списка.

Комментарии:

1. Кстати, если он не попадает в предупреждение, откройте Firebug или аналогичный — у вас, вероятно, ошибка JS.

2. Я пытаюсь перебирать элементы из переменной, а не из самого документа, возможно ли это? У меня нет ошибок в консоли Firebug, кажется, я не могу найти элементы из переменной. Спасибо

Ответ №5:

Проверьте эту скрипку

Это может помочь!