JQuery: как обратиться к подпункту с помощью специального класса

Я хочу перебрать элементы строки. Каждый элемент строки имеет элементы item как дочерние элементы. Итак, сначала я перебираю строку, а затем хочу обратиться к определенному элементу элемента, например третьему. Вот код, который у меня есть:

$(".pricetable .righttable .line:not(.blank)").each(function(j) {
    var currentLine = $(".pricetable .righttable .line:not(.blank)").eq(j);
    currentLine.(".item").each(function(k) {
        $(".pricetable .righttable .line .item").eq(i).addClass("active");
    });
});

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

currentLine.(".item").each(function(k)

Это не работает.

Фильтр XML применяется к не XML-значению ({0:#2=({}), длина:1, prevObject:{длина:3, prevObject:{0:#1=({}), контекст: # 1 #, длина:1}, контекст: # 1 #, селектор:".pricetable .righttable .line:not(.blank)", 0:#2#, 1:({}), 2:({{))}, контекст: # 1 #, селектор:".pricetable .righttable .line:not(.blank).slice(0,1)"}) file:///C:/Users/xxx/lib/pricetable.js Строка 112

Редактировать:
Ух ты, я не думал, что получу такой хороший и быстрый ответ! Я думаю, что я иду с этим решением:

$(".pricetable .righttable .line:not(.blank)").each(function(j) {
    $(this).children(".item").eq(i).addClass("active");
});

5 ответов

Решение
$(".pricetable .righttable .line:not(.blank)").each(function(j) {
    var currentLine = $(".pricetable .righttable .line:not(.blank)").eq(j);
    currentLine.find(".item").each(function(k) {
        $(".pricetable .righttable .line .item").eq(i).addClass("active");
    });
});

http://api.jquery.com/find/

Если они прямые потомки currentLine, вы должны просто children('.item') на месте find('.item'), Это называется обходом DOM. Посетите эту страницу (http://api.jquery.com/category/traversing/) и ознакомьтесь с описанием некоторых функций. Их будет очень полезно иметь в виду, если вы много пройдете:)

$('.pricetable .righttable .line:not(.blank)').find('.item').each(function() {
  // this point to child element - item
  // use $(this).addClass('active');
});

Небольшое улучшение, прежде чем я отвечу на ваш вопрос:

var currentLine = $(".pricetable .righttable .line:not(.blank)").eq(j);

легко заменяется на:

var currentLine = $(this);

Во-вторых, если вы хотите найти 3-й .item элемент внутри $(this)использовать .find()

.find(".item:nth-child(3)");

Не нужно перебирать строки. Если вам нужно перебрать строки, просто сравните k в 2 (Поскольку JavaScript считается от 0) и все.

Если вы хотите сделать что-то с Nth item каждого lineГораздо проще, чем кажется:

var index = 3; // the third "item" element 
$(".pricetable .righttable .line:not(.blank) .item:nth-child(" + index + ")")
  .addClass("active");

Смотрите это в действии.

Есть ли что-то еще, что вы хотите сделать, для чего выше не достаточно?

$(".pricetable .righttable .line:not(.blank)").each(function() {
  $(this).find('.item:nth-child(2)').addClass('active');
});
Другие вопросы по тегам