Использование jQuery для поиска следующей строки таблицы - PullRequest
15 голосов
/ 23 сентября 2008

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

Спасибо

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

<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>

Ответы [ 5 ]

18 голосов
/ 24 сентября 2008

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

$(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: Хорошо, я добавил код для изменения изображения. Это всего лишь один из способов сделать это. Я добавил класс в атрибут раскрытия как тег, когда следующая строка скрыта, и удалил его, когда строка была показана.

9 голосов
/ 24 сентября 2008

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

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

... и не имеет никаких посторонних классов.

3 голосов
/ 10 апреля 2012

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

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

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

1 голос
/ 24 сентября 2008

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

//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');
   }
}

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

0 голосов
/ 24 сентября 2008

Вот как изображения настроены в 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;");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...