У меня есть стол в ретрансляторе. Данные вводятся в таблицу, и каждой строке присваивается класс в зависимости от типа загружаемых данных. Например:
<table id="detail-table">
<tr class="typeA">
<td>Value</td>
</tr>
<tr class="typeB">
<td>Value</td>
</tr>
<tr class="typeC">
<td>Value</td>
</tr>
<tr class="typeB">
<td>Value</td>
</tr>
<tr class="typeA">
<td>Value</td>
</tr>
</table>
Стол свернутый. typeA - это заголовок, typeB - это потомок typeA, а typeC - это потомок typeB. В примере таблицы тип A имеет двух непосредственных дочерних элементов, а у первого дочернего элемента также есть дочерний элемент.
Когда пользователь нажимает на typeA, появляются две строки typeB, а когда у typeB есть дочерние элементы, он также расширяется, показывая строку typeC. У меня есть обработчик событий, который делает это по клику.
Мне нужно применить подробное раскрытие (typeA к typeC) для элемента с определенным значением. Мне нужно вызвать событие раскрытия для родителя и всех потомков этого родителя, когда значение ячейки в типе А равно значению, полученному из строки запроса. У меня есть код, который уже делает это. Тем не менее, я чувствую, что это немного взломать. Мне было интересно, есть ли у кого-нибудь предложения? Вот что у меня есть.
$(function() {
var tableRows = $('#detail-table').find("tr:gt(0)");
$(tableRows).each(function(i, val) {
//ExpandValue is a value in my C# page.
if ($.trim(val.cells[0].innerText) == '<%= ExpandValue %>'){
expandRows(i);
}
}
function expandRows(startIndex) {
// Expand the first row, the typeA class
// row that matches the value
$(tableRows[startIndex]).trigger('expand');
startIndex += 1;
while($(tableRows[startIndex]).attr("class") != "typeA"){
$(tableRows[startIndex]).trigger('expand');
startIndex++;
}
}
});
Это находит все строки таблицы. Затем перебирает массив строк таблицы. Условие проверяет innerText первой ячейки в каждой строке. Если innerText ячейки соответствует ExpandValue, целевая строка была найдена. Отправьте индекс этой строки в функцию expandRows. В функции expandRows разверните строку в startIndex, это строка класса typeA, которая соответствует ExpandValue. Затем увеличьте startIndex на единицу, чтобы указать на следующую строку. Цикл while проверяет класс каждой строки. Инициируйте событие расширения в каждой строке, пока не будет достигнута следующая строка типа. Это работает и расширяет каждый ряд правильно. Но опять же, я новичок в jquery и чувствую, что, возможно, есть какой-то способ сделать это лучше. Есть идеи?