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");
});
});
Если они прямые потомки 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');
});