.next直到从指定的

时间:2016-03-02 20:54:03

标签: jquery

我使用jQuery隐藏表格行直到今天的日期,这有效:

$('.date_display').each(function(i, cell){
    if (cell.scope == 'header') {
        if ($(cell).text() == today){
                return false;
            }
        }
        $(cell).parent().hide();
    });

但我似乎无法让nextUntil工作(jQuery v 1.11.1):

var showMe = $("th.mz_date_display:contains('"+today+"')");
$('th.date_display').first().nextUntil(showMe, 'tr').hide();

showMe正在控制台中返回一个对象。

HTML的MWE:

    <table>
        <tr>
            <th class="date_display">Monday</th>
        </tr>

        <tr>
            <td class="date_display">some text</td>
        </tr>

        <tr>
            <td class="date_display">some text</td>
        </tr>

        <tr>
            <th class="date_display">Tuesday</th>
        </tr>

        <tr>
            <td class="date_display">some text</td>
        </tr>

        <tr>
            <td class="date_display">some text</td>
        </tr>

        <tr>
            <th class="date_display">Wednesday</th>
        </tr>

        <tr>
            <td class="date_display">some text</td>
        </tr>

        <tr>
            <td class="date_display">some text</td>
        </tr>
    </table>
  1. Fiddle of non-nextUntil way
  2. Attempt with nextUntil

1 个答案:

答案 0 :(得分:1)

我认为问题与您使用nextUntil的方式有关。它只返回selector的兄弟姐妹。在您的代码中,$('th.date_display')指的是th元素的兄弟,而每个th在其tr中没有任何兄弟姐妹。要解决此问题,您需要搜索tr个元素,而不是th元素:

(function($){
   $(document).ready(function($) {
      var showMe = $("th.date_display:contains('Wednesday')").closest("tr");

      $('th.date_display').closest("table").find("tr:first").nextUntil(showMe, 'tr').addBack().hide();

   }); // On doc ready

})(jQuery);

查看JSFIDDLE

中的工作示例