JQuery Необходимо перебрать следующие элементы на основе ряда строк - PullRequest
1 голос
/ 30 января 2012

Ну, в принципе, у меня есть таблица, настроенная примерно так, но у <td> элементов может быть любое количество строк ...

<table width="100%">
    <tr class="tablerow0">
        <td class="tablecol_0" colspan="4">Content</td>
    </tr>
    <tr class="tablerow1">
        <td class="tablecol_0" rowspan="2">More Content</td>
        <td class="tablecol_1" colspan="3">Some More Content</td>
    </tr>
    <tr class="tablerow2">
        <td class="tablecol_1">And Yet More Content</td>
        <td class="tablecol_2">Content</td>
        <td class="tablecol_3">Content</td>
    </tr>
</table>

Хорошо, я хотел бы определить количество интервалов, которое можно сделать следующим образом:

$("td").each(function() {
    $(this).attr('rowspan');
});

Но мне нужно return false из каждой функции для каждого диапазона строк, превышающего 1. Например, когда он находит элемент с диапазоном строк, равным 2, он не должен переходить к следующему элементу, потому что диапазон строк присоединен к следующему элементу. НО БОЛЬШЕ ВАЖНО, мне нужно пройтись по интервалам строк для <tr> элементов.

Пример, если у меня есть настройки этой таблицы:

<table width="100%">
    <tr class="tablerow0">
        <td class="tablecol_0" rowspan="2">Content</td>
        <td class="tablecol_1">Content</td>
        <td class="tablecol_2">Content</td>
    </tr>
    <tr class="tablerow1">
        <td class="tablecol_1">More Content</td>
        <td class="tablecol_2">Some More Content</td>
    </tr>
    <tr class="tablerow2">
        <td class="tablecol_1">And Yet More Content</td>
        <td class="tablecol_2">Content</td>
        <td class="tablecol_3">Content</td>
    </tr>
</table>

Чем нужно будет ввести здесь последний <tr> с class="tablerow2", потому что диапазон строк охватывает только tablerow0 и tablerow1.

Надеюсь, вы понимаете, что я имею в виду, он должен иметь возможность зацикливаться внутри элементов <td> и делать что-то только тогда, когда количество rowspan было превышено для этих <tr> элементов в таблице. Разряд строки может быть больше 2, я просто упрощаю это, чтобы люди поняли то, что я здесь спрашиваю. Кроме того, может быть более 1 <td> элемента с размахом строк больше 1, поэтому он должен иметь возможность это знать. Я думаю, что мне нужно будет создать массив интервалов строк здесь, и длина массива будет основываться на каждом <td> значении интервала строк.

1 Ответ

1 голос
/ 30 января 2012
//cache the tr elements to loop through them
var $TRs = $('tr');

//this type of loop will perform quickly
for (var i = 0, len = $TRs.length; i < len; i++) {

    //check to make sure the last TR element doesn't have a TD child element with a rowspan attribute
    if (i == 0 || $TRs.eq(i - 1).children('[rowspan]').length == 0) {
        //we are on the first TR element or the previous TR element does not have a child TD element with a rowspan attribute
    }
}

Вы также можете изменить [rowspan] на [rowspan=2] для проверки определенного значения диапазона строк.

Вот демонстрационная версия: http://jsfiddle.net/JyQYW/

Обновление

Вот простой пример проверки более чем rowspan=2:

if (i == 0 || ($TRs.eq(i - 1).children('[rowspan=2]').length == 0 && (i > 1 && $TRs.eq(i - 2).children('[rowspan=3]').length == 0)) && (i > 2 && $TRs.eq(i - 3).children('[rowspan=4]').length == 0))) {

Новый код проверяет, достаточно ли строк вниз, а затем проверяет, влияют ли последние три строки на текущую..

...