JQuery: у меня есть класс, я повторяю его с каждым. Результат отличается каждый ход. Как использовать это и получить доступ к значению? - PullRequest
1 голос
/ 13 мая 2009

Я новичок, и я впервые сталкиваюсь с такой проблемой.

Я перебираю класс, используя каждый метод, предоставленный jQuery. На странице есть много классов с одинаковыми именами. Таким образом, мы можем ожидать, что это может быть 15 итераций.

Каждая итерация имеет различное значение.

$(".book").each(function(n) {
    var result = $(this 

Я должен получить последний TD со значением List. Поэтому я могу использовать

$(".book tbody tr:last")

Но я думаю, что эта вещь не будет работать в каждой среде, потому что она не будет знать, какой контекст она обрабатывает в настоящее время.

$ (этот tbody tr: last) также не будет работать. Как я могу разработать селектор, который будет работать?

<div class = "book">
    <p class = "chapter">
        <table>
            <tbody>
                <tr>
                    <td>General</td>
                    <td>
                        <b>Buck</b>
                    </td>
                </tr>

                <tr>
                    <td>General</td>
                    <td>List</td>
                </tr>
            </tbody>
        </table>
    </p>
</div>

Ответы [ 2 ]

3 голосов
/ 13 мая 2009

Предполагая, что HTML-код, который вы разместили, представляет собой одну книгу, и есть много других, похожих на нее, и вы хотите получить доступ к последним <tr> в каждом из них, это должно работать:

$('div.book tbody tr:last-child').each(function() {
    var value = $(this).find('td').eq(1).text();
});

value будет тогда «List» с приведенным выше HTML-кодом, и если у вас есть несколько <div> s, он будет повторяться, как и следовало ожидать до последнего <tr> каждого из них.

Ключевым моментом здесь является то, что мы используем last-child вместо простого last. Документация last говорит, что она будет соответствовать последнему выбранному элементу; мы этого не хотим. Вместо этого нам нужно то, что описывает last-child: соответствует всем элементам, которые являются последними дочерними элементами их родителя. Это различие важно в данном конкретном случае, так как нам нужен только последний дочерний элемент конкретной таблицы, в которой мы сейчас находимся, нам не нужен последний общий результат.

Если вы хотите, чтобы последние <td> в каждом последнем <tr>, мы могли бы даже сделать это:

$('div.book tbody tr:last-child td:last-child').each(function() {
    var value = $(this).text();
});

Этот селектор выберет каждого последнего ребенка <tr> и выберет его соответствующего последнего ребенка <td>. Это было бы лучше, если вам все равно, каково значение первого <td>. Если вы это сделаете, то вы хотите использовать первый.

2 голосов
/ 13 мая 2009

Если вы перебираете только элементы tr:last, ответ Паоло должен работать для вас. Однако, если вам нужно выполнить более одного запроса к каждому div.book, попробуйте вместо этого:

$("div.book").each(function() {
    $("tbody tr:last", this).doStuff();
    $("p.chapter", this).doOtherStuff();
}

Второй аргумент функции доллара - это «узел контекста», по умолчанию он равен document (то есть он «ищет» весь DOM).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...