Значок шеврона Jquery не переключается вниз с помощью строки аккордеона при сворачивании

Во-первых, мой jfiddle: http://jsfiddle.net/34y943qq/

У меня есть таблица начальной загрузки со свойствами аккордеона, которая расширяет дочерние строки при нажатии. Когда я нажимаю другую строку, она расширяется, а также сворачивает ранее открытую строку. Это работает, однако значки шеврона, которые я использую для обозначения раскрывающегося состояния, похоже, не переворачиваются.

Я внес изменение http://jsfiddle.net/34y943qq/1/, но это также кажется чтобы не свернуть предыдущие переключенные шевроны. Единственный способ, которым я могу заставить шеврон переключаться назад, - это щелкнуть прямо по строке, чтобы открыть / закрыть ее.

Вот jscript, который я добавил:

$(this).find('span').closest('.chevron_toggleable')
    .not(this)
    .toggleClass('glyphicon-chevron-up glyphicon-chevron-down');

Я также пытался переместить ".not(this)" до find('span'), но это тоже не работает.

Что мне не хватает?

вот код для создания таблицы:

 if (mysqli_num_rows($result)) {
    echo '<table id="dasTable" cellpadding="0" cellspacing="0" class="table table-hover table-bordered tablesorter">';
    echo '<thead>';
    echo '<tr><th>Service ID</th><th>Assigned Namespace</th><th>DAS Station</th><th>Ingest Completed</th><th>Currently Ingesting</th><th>Offsite going to DAS</th><th>Mounted</th></tr></thead>';
    echo '<tbody>';

    // Generate rows from current das information
    while ($row2 = mysqli_fetch_row($result)) {

        // Format cell background based on content
        $sidvalue       = $row2[0];
        $station        = $row2[1];
        $used           = $row2[2];
        $attacheddate   = $row2[3];
        $starteddate    = $row2[4];
        $ingestcomplete = $row2[5];
        $ingesting      = $row2[6];
        $updating       = $row2[7];
        $mounted        = $row2[8];
        $totaljobs      = $row2[9];
        $remainingjobs  = $row2[10];
        $assigned       = $row2[11];
        echo '<tr class="accordion-toggle" data-toggle="collapse" id="', $sidvalue, '" data-target=".', $sidvalue, '">';
        echo '<td class="rowtd"><span class="chevron_toggleable glyphicon glyphicon-chevron-down"></span> ', $sidvalue, '</td>';
        echo '<td class="rowtd">', $assigned, '</td>';
        echo '<td class="rowtd">', $station, '</td>';
        echo '<td class="rowtd">', $ingestcomplete, '</td>';
        if ($ingesting == 'GREEN') {
            echo '<td class="success">YES</td>';
        } else {
            if ($ingestcomplete != 'NO') {
                echo '<td class="success">NO</td>';
            } else {
                echo '<td class="danger">NO</td>';
            }
        }

        if ($updating == 'GREEN') {
            echo '<td class="success">NO</td>';
        } else {
            echo '<td class="danger">YES</td>';
        }

        if ($mounted == 'GREEN') {
            echo '<td class="success">YES</td>';
        } else {
            if ($ingestcomplete != 'NO') {
                echo '<td class="success">NO</td>';
            } else {

                echo '<td class="danger">NO</td>';
            }
        }
     echo '</tr>';

На самом деле, я вижу, где это вызывается дважды:

 // create the sub row
            echo '<tr class="expand-child collapse ', $sidvalue, '">';
            echo '<td class="h4" colspan="3"><b>Attached Date:</b> ', $attacheddate, '</td>';
            $usedgb = round($used / 1024 / 1024 / 1024);
            echo '<td class="h4" colspan="4"><i class="fa fa-hdd-o fa-lg"></i> ', $used, ' Bytes (', $usedgb, ' GB)</td>';
            echo '</tr>';
            echo '<tr class="expand-child collapse ', $sidvalue, '">';
            echo '<td class="h4" colspan="3"><b>Ingest Start Date:</b> ', $starteddate, '</td>';
            echo '<td class="h4" colspan="4">';
            echo '<div class="progress">';
            if ($remainingjobs == 0) {
                $jobsdone = $totaljobs - 1;
                $percentdone = round($jobsdone / $totaljobs * 100);
                echo '<div class="progress-bar progress-bar-info progress-bar-striped active" role="progressbar" aria-valuenow="', $percentdone, '" aria-valuemin="0" aria-valuemax="100" style="width:', $percentdone, '%">Last Job</div>';
            } else {
                $jobsdone = $totaljobs - $remainingjobs;
                $percentdone = round($jobsdone / $totaljobs * 100, 1);
                echo '<div class="progress-bar progress-bar-info progress-bar-striped active" role="progressbar" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100" style="width:', $percentdone, '%"><b>', $jobsdone, '/', $totaljobs, ' (', $percentdone, '%)</b></div>';
            }
            echo '</div>';
            echo '</td>';
            echo '</tr>';
        }

Причина, по которой они оба называются «расширить дочерний коллапс», связана с вопросом ТАК, который я нашел некоторое время назад о том, как сделать расширяющиеся строки ... Я пытаюсь найти ссылку сейчас, но я считаю, что суть в том, что каждый суб Строке требовалось одно и то же имя свертывания, поэтому при щелчке по родительской строке все дочерние строки сворачивались.

Изменить: здесь мы идем Создание аккордеонной таблицы с помощью Bootstrap

В этом примере есть 1 подстрока для каждой расширяемой строки, я добавил вторую расширяемую строку с тем же именем на основе кода, найденного здесь: http://www.bootply.com/122871


person Evan R.    schedule 03.09.2015    source источник


Ответы (2)


ДЕМО: http://jsfiddle.net/rn07jq35/2/ Сравните первые три строки с производительность остальных

Был на работе и не было времени что-то попробовать.

Я отредактировал ответ на этот

$(document).ready(function () {
    $(function () {
        $("#dasTable").tablesorter();
    });
});
$('.collapse').on('show.bs.collapse', function (e) {
    $("#dasTable").find('.collapse.in').collapse('hide');

    var targetx = $(this).data('trigger');
    $(targetx).find('span').toggleClass('glyphicon-chevron-up glyphicon-chevron-down');
});
$('.collapse').on('hide.bs.collapse', function (e) {
    var targetx = $(this).prev('.accordion-toggle').find('span');
    var targetx = $(this).data('trigger');
    $(targetx).find('span').toggleClass('glyphicon-chevron-up glyphicon-chevron-down');
});

Дело в ребенке вот в чем

        <tr class="accordion-toggle" data-toggle="collapse" id="1dc4" data-target=".1dc4">
            <td class="rowtd"> <span class="chevron_toggleable glyphicon glyphicon-chevron-down"></span> 1dc4</td>
            <td class="rowtd">Gen2_SJC9</td>
            <td class="rowtd">adsdas5</td>
            <td class="rowtd">NO</td>
            <td class="success">YES</td>
            <td class="success">NO</td>
            <td class="success">YES</td>
        </tr>
        <tr class="expand-child">
            <td colspan="7">
                <div class="container collapse 1dc4" data-trigger="#1dc4">
                    <div class="left"><b>Attached Date:</b>2015-08-26 16:42:04</div>
                    <div class="right"><i class="fa fa-hdd-o fa-lg"></i> 2883577569280 Bytes (2686 GB)</div>
                    <div class="left"><b>Ingest Start Date:</b> 2015-08-31 19:10:14</div>
                    <div class="right">
                        <div class="progress">
                            <div class="progress-bar progress-bar-info progress-bar-striped active" role="progressbar" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100" style="width:86.7%"><b>13/15 (86.7%)</b>
                            </div>
                        </div>
                    </div>
                </div>
            </td>
        </tr>

То есть у вас по сути один ребенок. Затем вы помещаете свой коллапс в тег <div>, а не в тег <tr>.

Надеюсь это поможет.

person stanley1943    schedule 04.09.2015
comment
RE: открытие дважды, это хороший вопрос, и этого не должно происходить (мне было интересно, почему он имеет небольшую задержку при открытии / сворачивании и не является плавным, как другие демонстрации). Я опубликую ответ с моим кодом, который генерирует таблицу, я не могу понять, почему он делает это дважды. - person Evan R.; 04.09.2015
comment
Это работает, за исключением того, что индикатор выполнения и поля используемого пространства прикрепляются влево при расширении. В jsfiddle вы не заметите этого по умолчанию, но если вы сдвинете панель влево (чтобы результаты занимали больше места, вы заметите это, как только развернете строку). Это как если бы правый div не соблюдал 50% ширины. - person Evan R.; 10.09.2015
comment
сделайте .collapse.in display:block; jsfiddle.net/rn07jq35/3 посмотрите, решит ли это вашу проблему . - person stanley1943; 10.09.2015
comment
это решает. Спасибо, сэр! В качестве альтернативы изменение правой ширины на 400 пикселей также решило эту проблему, но оставило ее выровненной с границей столбца выше... с display:block он немного тянет влево, что, по мнению моей команды, делает строку более заметной. Спасибо! - person Evan R.; 10.09.2015

Я бы поместил часть шеврона подкачки в функцию click следующим образом:

$('.accordion-toggle').on('click', function() {
    $('.chevron_toggleable').removeClass('glyphicon-chevron-up').addClass('glyphicon-chevron-down');
    $(this).find('span').closest('.chevron_toggleable').toggleClass('glyphicon-chevron-down glyphicon-chevron-up');
});

JSFiddle

person imtheman    schedule 03.09.2015
comment
Я даже не подумал сначала очистить класс. Это сработало, так что примите это - person Evan R.; 04.09.2015