Использование jQuery для поиска следующей строки таблицы

Используя jQuery, как связать событие щелчка с ячейкой таблицы (ниже, class = "expand"), которая немедленно изменит image src (который находится в выбранной ячейке - исходный будет plus.gif, чередующийся с minus.gif) и hide/show - строка немедленно под ним в зависимости от того, имеет ли эта строка класс hide. (покажите его, если у него есть класс «скрыть», и скрыть, если у него нет класса «скрыть»). Я гибко меняю идентификаторы и классы в разметке.

Спасибо

Строки таблицы

<tr>
  <td class = "expand"><img src = "plus.gif"/></td>
  <td>Data1</td><td>Data2</td><td>Data3</td>
</tr>
<tr class = "show hide">
  <td> </td>
  <td>Data4</td><td>Data5</td><td>Data6</td>
</tr>
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
15
0
53 648
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Теги показать и скрыть не нужны:

$(document).ready(function(){   
    $('.expand').click(function() {
        if ( $(this).hasClass('hidden') )
            $('img', this).attr("src", "plus.jpg");
        else 
            $('img', this).attr("src", "minus.jpg");

        $(this).toggleClass('hidden');
        $(this).parent().next().toggle();
    });
});

edit: Хорошо, я добавил код для изменения изображения. Это всего лишь один из способов сделать это. Я добавил класс к атрибуту expand в качестве тега, когда следующая за ним строка скрыта, и удалил его, когда строка была показана.

Разве вы не любите просто jQuery? Вместо $(this).find('img') вы можете использовать чуть более лаконичный $('img', this). Функция $ принимает второй параметр. Когда он используется, jQuery ищет селектор только в контексте this.

Lasar 24.09.2008 00:30

это кажется мне немного отсталым. все остальное читается слева направо, тогда как при использовании этого синтаксиса вы должны читать справа налево. они оба имеют одинаковый эффект, поэтому я обычно стараюсь придерживаться стиля $ (this) .find (...).

nickf 20.10.2008 05:42

Интересно, есть ли разница в производительности. Например. Приводит ли использование того или другого кода к выполнению другого кода внутри jQuery?

rfunduk 06.03.2009 22:06

Вот как изображения настраиваются в html

<tr>

<td colspan = "2" align = "center"
<input type = "image" src = "save.gif" id = "saveButton" name = "saveButton"
    style = "visibility: collapse; display: none" 
     onclick = "ToggleFunction(false)"/>

<input type = "image" src = "saveDisabled.jpg" id = "saveButtonDisabled" 
      name = "saveButton" style = "visibility: collapse; display: inline"
      onclick = "ToggleFunction(true)"/>
</td>
</tr>

Измените событие onClick на свою собственную функцию в JS, чтобы переключаться между ними.

в

ToggleFunction(seeSaveButton){    
    if (seeSaveButton){
        $("#saveButton").attr("disabled", true)
                        .attr("style", "visibility: collapse; display: none;");
        $("#saveButtonDisabled").attr("disabled", true)
                                .attr("style", "display: inline;");
    }    
    else {    
        $("#saveButton").attr("disabled", false)
                        .attr("style", "display: inline;");
        $("#saveButtonDisabled")
                        .attr("disabled", true)
                        .attr("style", "visibility: collapse; display: none;");
    }
}

Если вы сделаете отступ каждой строки кода на 4 пробела, он отобразится как блок «кода» с открывающими тегами и т. д.

ConroyP 24.09.2008 00:28

Попробуй это...

//this will bind the click event
//put this in a $(document).ready or something
$(".expand").click(expand_ClickEvent);

//this is your event handler
function expand_ClickEvent(){
   //get the TR that you want to show/hide
   var TR = $('.expand').parent().next();

   //check its class
   if (TR.hasClass('hide')){
      TR.removeClass('hide'); //remove the hide class
      TR.addClass('show');    //change it to the show class
      TR.show();              //show the TR (you can use any jquery animation)

      //change the image URL
      //select the expand class and the img in it, then change its src attribute
      $('.expand img').attr('src', 'minus.gif');
   } else {
      TR.removeClass('show'); //remove the show class
      TR.addClass('hide');    //change it to the hide class
      TR.hide();              //hide the TR (you can use any jquery animation)

      //change the image URL
     //select the expand class and the img in it, then change its src attribute
      $('.expand img').attr('src', 'plus.gif');
   }
}

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

спасибо, это полезный код .... но $ ('. expand img') повлияет на все изображения в классе расширения ... Я просто хочу повлиять на одно изображение в ячейке таблицы (<td>)

Jay Corbett 24.09.2008 00:36

Никто не любит тернарный оператор? :) Я понимаю соображения удобочитаемости, но по какой-то причине мне хочется написать это как:

$(document).ready( function () {
    $(".expand").click(function() {
            $("img",this).attr("src", 
                 $("img",this)
                    .attr("src")= = "minus.gif" ? "plus.gif" : "minus.gif"
            );
            $(this).parent().next().toggle();
    });
});

... и не имеет никаких посторонних занятий.

Недавно мне пришлось решить эту проблему, но в моей было несколько вложенных таблиц, поэтому мне нужна была более конкретная и безопасная версия javascript. Моя ситуация была немного другой, потому что у меня было содержимое td и я хотел переключить следующий TR, но концепция остается той же.

$(document).ready(function() {
    $('.expandButton').click(function() {
        $(this).closest('tr').next('tr.expandable').fadeToggle();
    });
});

Ближайший захватывает ближайший TR, в данном случае первого родителя. Вы можете добавить туда класс CSS, если хотите быть предельно конкретным. Затем я указываю захват следующего TR с классом расширяемого объекта для этой кнопки. Затем я просто fadeToggle(), чтобы переключить, отображается он или нет. Указание селекторов действительно помогает сузить круг задач, которые он будет обрабатывать.

Другие вопросы по теме