JQuery: как обратиться к подпункту с помощью специального класса - PullRequest
1 голос
/ 08 сентября 2011

Я хочу перебрать элементы line . Каждый элемент line имеет элементы item в качестве дочерних элементов. Итак, сначала я перебираю строку , а затем хочу обратиться к определенному элементу 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");
    });
});

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

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

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

Фильтр XML применяется к не XML-значению ({0: # 2 = ({}), длина: 1, prevObject: {length: 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)"}) Файл: /// C: /Users/xxx/lib/pricetable.js Линия 112

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

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

Ответы [ 5 ]

3 голосов
/ 08 сентября 2011
$(".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/) и прочитайте описания некоторых функций там. Они будут очень полезны, если вы будете много ходить :))

2 голосов
/ 08 сентября 2011

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

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

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

var currentLine = $(this);

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

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

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

2 голосов
/ 08 сентября 2011

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

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

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

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

2 голосов
/ 08 сентября 2011
$('.pricetable .righttable .line:not(.blank)').find('.item').each(function() {
  // this point to child element - item
  // use $(this).addClass('active');
});
1 голос
/ 08 сентября 2011
$(".pricetable .righttable .line:not(.blank)").each(function() {
  $(this).find('.item:nth-child(2)').addClass('active');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...