Как я скрываю середину таблицы с помощью jQuery?

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

49
задан Brian Tompsett - 汤莱恩 14 September 2016 в 00:24
поделиться

6 ответов

Что-то вроде этого могло работать:

<table>
    <tbody>
      <tr><td>Column1</td><td>Column2</td></tr>
      <tr><td>Column1</td><td>Column2</td></tr>
      <tr class="Show_Rows"><td>Start</td><td>Hiding</td></tr>
    </tbody>
    <tbody class="Table_Middle" style="display:none">
      <tr><td>Column1</td><td>Column2</td></tr>
      <tr><td>Column1</td><td>Column2</td></tr>
      <tr><td>Column1</td><td>Column2</td></tr>
    </tbody>
    <tbody>
      <tr class="Show_Rows"><td>End</td><td>Hiding</td></tr>
      <tr><td>Column1</td><td>Column2</td></tr>
      <tr><td>Column1</td><td>Column2</td></tr>
    </tbody>
</table>


$('#something').click( function() {
    $('.Table_Middle').hide();
    $('.Show_Rows').show();
});

$('.Show_Rows').click( function() { 
    $('.Show_Rows').hide();
    $('.Table_Middle').show();
});
56
ответ дан nickf 7 November 2019 в 11:49
поделиться

Самый легкий путь состоит в том, чтобы добавить <tbody> в сгруппировать строки и переключатель, что между none и table-row-group (исключения выгоды и устанавливают его на block для IE). Не уверенный в создании его характерный для jQuery, но это - "нормальный" способ сделать вещи.

4
ответ дан Greg 7 November 2019 в 11:49
поделиться

Вот решение, которое не требует никакой дополнительной разметки, и это ухудшается приятно.

<table id="myTable">
    <tbody>
        <tr><td>Cell</td><td>Cell</td></tr>
        <tr><td>Cell</td><td>Cell</td></tr>
        <tr><td>Cell</td><td>Cell</td></tr>
        <tr><td>Cell</td><td>Cell</td></tr>
        <tr><td>Cell</td><td>Cell</td></tr>
    </tbody>
</table>

и jQuery... У меня есть hardcoded в нескольких вещах здесь (как идентификатор таблицы, количество строк для показа, и т.д. Они могли быть помещены в class атрибут на таблице, если бы Вы хотели, чтобы он был более допускающим повторное использование. (например: <table class="hidey_2">)

var showTopAndBottom = 2,
    minRows = 4,
    $rows = $('#myTable tr').length),
    length = $rows.length
;
if (length > minRows) {
    $rows
        .slice(showTopAndBottom, length - showTopAndBottom)
        .hide()
    ;
    $rows
        .eq(showTopAndBottom - 1)
        .after(
            // this colspan could be worked out by counting the cells in another row
            $("<tr><td colspan=\"2\">Show</td></tr>").click(function() {
                $(this)
                    .remove()
                    .nextAll()
                    .show()
                ;
            })
        )
    ;
}
4
ответ дан nickf 7 November 2019 в 11:49
поделиться

При предоставлении середины <tr /> теги" Table_Middle", класс она делает намного легче сделать. Тогда это только проводит несколько строк jQuery. Один для добавления "Шоу Полная Таблица" строка и другой для добавления слушателя щелчка для той строки. Удостоверьтесь, что изменились colspan атрибут "X" значение к числу столбцов в Вашей таблице.

 // jQuery chaining is useful here
 $(".Table_Middle").hide()
                   .eq(0)
                   .before('<tr colspan="X" class="showFull">Show Full Table<tr/>');

$(".showFull").click(function() {
    $(this).toggle();
    $(".Table_Middle").toggle();
});

Это полезно, потому что это ухудшается приятно и доступно через большое количество браузеров/устройств. Если JavaScript выключен, или CSS отключен (или любой другой сценарий, который мог бы заставить этот код не поддерживаться), нет никакого "шоу полной таблицы" строка.

2
ответ дан Dan Herbert 7 November 2019 в 11:49
поделиться

Я, вероятно, сделал бы это как это:

<table>
    <thead>
        <tr>
            <th>Col1</th>
            <th>Col2</th>
            <th>Col3</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>data1</td>
            <td>data1</td>
            <td>data1</td>
        </tr>
        ...
    </tbody>
    <tbody id="hidden-rows">
        <tr>
            <td colspan="3">
                <a href="#" onclick="$('#hidden-rows').hide();$('#extra-rows').show();">
                    Show hidden rows
                </a>
            </td>
        </tr>
    </tbody>
    <tbody id="extra-rows" style="display: none;">
        <tr>
            <td>data1</td>
            <td>data1</td>
            <td>data1</td>
        </tr>
        ...
    </tbody>
    <tbody>
        <tr>
            <td>data1</td>
            <td>data1</td>
            <td>data1</td>
        </tr>
        ...
    </tbody>
</table>

Это не замечательный метод, потому что это не ухудшается приятно.

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

кроме того, Ваш метод предоставления строк для сокрытия конкретного класса должен также работать. JQuery выглядел бы примерно так:

$(document).ready(function() {
    $('tr.Table_Middle').hide();
});

необходимо было бы все еще создать строку со ссылкой для вывода на экран их все же.

1
ответ дан SpoonMeiser 7 November 2019 в 11:49
поделиться

Try to use slice() method:

$("#table tr").slice(1, 4).hide();
4
ответ дан 7 November 2019 в 11:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: