Как выбрать все элементы в списке, используя JQuery Selector

0

Я создаю динамический список в этих строках:

<li class="MainMenuList" data-role=list-divider>
    <li data-icon=check id="1">
        <a name="n1" id="id-1">Text-1</a>
    </li>
    <li data-icon=check id="2">
        <a name="n2" id="id-2">Text-1</a>
    </li>
    <li data-icon=check id="3">
        <a name="n3" id="id-3">Text-1</a>
    </li>
</li>

Как запустить JQuery.each() для доступа ко всем значениям в списке. Попытка этого не дает результата муравья.

$( ".MainMenuList li a" ).each(function( index ) {
    var n1 = $(this).attr('name');
    var n2 = parseInt ($(this).attr('id'));
    alert( index + "-" + n1 + "-" + n2);
});

Может кому-то помочь.

благодаря

  • 4
    Ваш HTML неверен.
  • 1
    Чтобы расширить этот довольно краткий комментарий, ваши теги li должны содержаться в теге ul (неупорядоченный список) или ol (упорядоченный список)
Показать ещё 1 комментарий
Теги:
jquery-selectors

3 ответа

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

Здесь jsFiddle вашего кода

  • Как уже упоминалось в комментариях, ваш первый элемент <li> должен быть <ul>
  • Вы также должны либо изменить id <a> на строго число (поскольку ваш синтаксический анализ его как целое число), либо просто получить номер части (через substr или что-то еще)
  • 0
    Благодарю. Да, это сработало. Я думаю, что основной ошибкой, которую я сделал, было неиспользование <ul>, хотя список все еще работал отлично.
  • 0
    Спасибо всем остальным за их вклад также. Да, это был сырой HTML (извлеченный из основного кода). Но я обнаружил ошибку в том, что я не использовал ul, поэтому не смог правильно использовать селектор. Еще раз спасибо.
3

Ваш HTML недопустим, внешняя li должна быть ul, чтобы она была действительной.

<ul class="MainMenuList" data-role=list-divider>
    <li data-icon=check id="1">
        <a name="n1" id="id-1">Text-1</a>
    </li>
    <li data-icon=check id="2">
        <a name="n2" id="id-2">Text-1</a>
    </li>
    <li data-icon=check id="3">
        <a name="n3" id="id-3">Text-1</a>
    </li>
</ul>

Эта строка

var n2 = parseInt ($(this).attr('id'));

такой же как

var n2 = parseInt("id-2");

и parseInt не вернет 2, он вернет NaN.

Вам нужно будет использовать регулярное выражение

$(this).attr('id').match(/\d+/)[0]

или разделите, чтобы вытащить номер

$(this).attr('id').split("-")[1]

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

$(this).parent().attr('id')
1

Вы вызываете parseInt() в строке. Если вы знаете, что ваши идентификаторы всегда будут в форме id-N вы можете просто сделать

var id = $(this).attr("id");
var n2 = parseInt(id.split("-")[1]);

Ещё вопросы

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