slideToggle в строке таблицы

SlideToggle работает со столом?

Я хочу скользить по строке таблицы. но это просто появляется без какого-либо эффекта.


person hd.    schedule 26.02.2011    source источник


Ответы (8)


SlideToggle работает со строками таблицы, просто отстой.

Если у вас есть строка таблицы с высотой больше минимальной - вот так

<tr height="30%">

Затем slidetoggle будет плавно скользить вниз, пока не достигнет минимальной высоты... затем он сразу же исчезнет, ​​как вы использовали

$("#tr").hide();

Я сделал jsfiddle, демонстрирующий это на http://jsfiddle.net/BU28E/1/.

Лучшим решением для вас может быть использование таблицы, состоящей из div. Divs будут скользить вверх очень плавно. Я сделал еще один jsfiddle, демонстрирующий это на http://jsfiddle.net/BU28E/2/.

person jwegner    schedule 26.02.2011
comment
спасибо за ваше объяснение, так что у tr есть некоторые проблемы с эффектом слайда. как я могу это решить? я не могу получить tr любой высоты. Его высота определяется его содержимым. - person hd.; 27.02.2011
comment
Верно. Я не знаю, как заставить ‹tr› скользить вниз. По крайней мере, в хроме высота НЕ будет ниже минимума для отображения контента. Мое решение состояло в том, чтобы использовать ‹div›s. Я разместил jsfiddle выше, но вот еще раз ссылка: jsfiddle.net/BU28E/2 - person jwegner; 27.02.2011

Что я делаю, так это помещаю один DIV в строку и устанавливаю заполнение TR и TD равным нулю. Затем я могу переключать div вместо строки:

<table>
  <tr style="padding: 0">
    <td style="padding: 0">
      <div id="slideme" style="display: none">
    </td>
  </tr>
</table>

$("#slideme").slideToggle();

Прекрасно работает. Я думаю, вы могли бы поместить DIV в каждый столбец и переключать их одновременно, если вам это нужно.

person Jonatan    schedule 03.10.2012
comment
это почти работает, за исключением того, что строка и/или ячейка резервирует пространство для div, поэтому зарезервированное пространство просто появляется, и div скользит в него, а не таблица сдвигается больше. - person Dave Cousineau; 30.07.2017
comment
Да, я бы не сказал, что это отлично работает, потому что место зарезервировано, и даже если вы установите высоту строки на 0, анимация слайда все равно будет заикаться. - person Vincent; 01.03.2019

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

скажите, что вы хотите скользить по первой строке таблицы (этот код будет скользить вверх по заголовку):

$('table tr').first().children().slideUp();

так что, по сути, вы хотели бы скользить вверх по дочерним элементам Row вместо самой строки :)

person Mawaheb    schedule 24.10.2013

Попробуйте использовать

$("#tr").fadeToggle(1000) 

для аналогичного эффекта

person Robert Benyi    schedule 17.01.2017

Вы можете сделать это, установив tr, который вы хотите сдвинуть, на display:none;, затем внутри этого tr добавьте td с colspan, равным количеству столбцов в вашей таблице, с div, который также установлен как display:none внутри этого td.

Весь контент, который вы хотите в скользящей строке, попадает в вышеупомянутый div, в результате чего tr скользит с анимацией.

Фрагмент ниже показывает это в действии.

$(".accordion-row").on("click",
  function() {
    var accordionRow = $(this).next(".accordion");
    if (!accordionRow.is(":visible")) {
      accordionRow.show().find(".accordion-content").slideDown();
    } else {
      accordionRow.find(".accordion-content").slideUp(function() {
        if (!$(this).is(':visible')) {
          accordionRow.hide();
        }
      });
    }
  });
.accordion-row {
  cursor: pointer;
}

.accordion {
  display: none;
  width: 100%;
}

.accordion-content {
  display: none;
}


/* Only used to remove undeeded padding added by bootstrap */
table.table.table-hover>tbody>tr>td {
  padding: 0;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="table table-hover">
  <thead>
    <tr>
      <th>
        th1
      </th>
      <th>
        th2
      </th>
      <th>
        th3
      </th>
    </tr>
  </thead>
  <tbody>
    <tr class="accordion-row">
      <td>
        tr1 td1
      </td>
      <td>
        tr1 td2
      </td>
      <td>
        tr1 td3
      </td>
    </tr>
    <tr class="accordion">
      <td colspan="3">
        <div class="accordion-content">
          tr1 accordion-content
        </div>
      </td>
    </tr>
    <tr class="accordion-row">
      <td>
        tr2 td1
      </td>
      <td>
        tr2 td2
      </td>
      <td>
        tr2 td3
      </td>
    </tr>
    <tr class=" accordion">
      <td colspan="3">
        <div class="accordion-content">
          tr2 accordion-content
        </div>
      </td>
    </tr>
  </tbody>
</table>

person Callum    schedule 12.07.2018

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

http://jsfiddle.net/BU28E/622/

$("button").click(function(){
    $('#1').slideUp({
        duration: 1500,
        step: function(){
            var $this = $(this);
            var fontSize = parseInt($this.css("font-size"), 10);

            // if the real and css heights differ, decrease the font size until they match
            while(!sameHeight(this) && fontSize > 0){
                $this.css("font-size", --fontSize);
            }
        }
    });
});

function sameHeight(el){
    var cssHeight = el.style.height;
    cssHeight = parseFloat(cssHeight.substring(0,cssHeight.length-2));
    var realHeight = $(el).innerHeight();

    return isNaN(cssHeight) || realHeight - cssHeight < 2;
}

Эффект немного отличается тем, что содержимое сжимается, в отличие от обычного эффекта слайда.

< 2 в последней строке, возможно, потребуется скорректировать в зависимости от ваших границ (и, возможно, других факторов). Кроме того, это только демонстрирует скрытие содержимого. Аналогичный подход потребуется, чтобы позволить размеру шрифта увеличиваться по мере того, как строка скользит вниз. Это скорее доказательство концепции.

person James Montagne    schedule 05.09.2013

Редактировать: после попытки ответа Джонатана его метод выглядит немного чище.

Здесь у меня есть строка таблицы с классом view-converters, при нажатии на которую будут отображаться/скрываться все элементы div с классом TCConverters.

Мои строки выглядят так:

<tr><td><div class="TCConverters"><input type="button" value="b1"></div></td></tr>
<tr><td><div class="TCConverters"><input type="button" value="b2"></div></td></tr>
<tr><td><div class="TCConverters"><input type="button" value="b3"></div></td></tr>
<tr><td><div class="TCConverters"><input type="button" value="b4"></div></td></tr>

Вот код, который запускается, когда вы нажимаете view-converters.

Я не делал ничего особенного с отступами ячеек таблицы.

Обратите внимание, что мы скрываем строку таблицы, когда закончим анимацию слайда.

$(".view-converters").click(function() {
    if(!$(".TCConverters:first").is(":visible")) {
        $(".TCConverters").parent().parent().show();
    }
    $(".TCConverters").slideToggle(200,function() { 
        if(!$(this).is(":visible")) {
            $(this).parent().parent().hide();
        }
    });
});

Это выглядит так:

Слайд-таблица

Оригинал:

Здесь у меня есть строка таблицы с классом view-converters, при нажатии на которую будут отображаться/скрываться все строки с классом TCConverters:

Вы можете отрегулировать скорость, изменив начальное значение hacky и приращение в каждом .each.

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

Если вы действительно хотите уменьшить высоту строки, вы, вероятно, можете просто анимировать ее самостоятельно, заменив param.hide() на setTimeout, который уменьшает высоту, пока она не достигнет 0.

$(".view-converters").click(function() {
    var hacky = 50;
    if($('.TCConverters:first').is(':visible')) {
        $('.TCConverters').each(function() {
            var param = $(this);
            setTimeout(function() { param.hide(); },hacky);
            hacky += 5;
        });
    }
    else {
        $($('.TCConverters').get().reverse()).each(function() {
            var param = $(this);
            setTimeout(function() { param.show(); },hacky);
            hacky += 5;
        });
    }
});

Это выглядит так:

Переключатель слайдов TR

person user1274820    schedule 16.05.2016

Вы можете сдвинуть переключатель строки в таблице. Пожалуйста, попробуйте это

Html-код таблицы:

<a href="#" >ok</a>
<table id="tbl">
    <tr><td>1</td><td>2</td></tr>
    <tr><td>3</td><td>4</td></tr>
    <tr><td>6</td><td>5</td></tr>
</table>

Код jQuery находится здесь, по щелчку «a» href таблица будет переключена.

$(document).ready(function() {
    $("a").click(function() {
        $('table tr td').slideToggle("medium");
    });           
});

Для конкретной строки индекса вы можете использовать $('table tr:eq(rowindex) td').

person Deepak    schedule 26.02.2011