2012-05-10 2 views
2

У меня есть таблица с выпадающим списком html в первой строке. Первый вариант пуст.Скрытие всего, кроме первой строки таблицы с jQuery

Мне нужно скрыть все строки в таблице, кроме тех, которые соответствуют значению селектора. Если выбрана первая опция - скройте все строки ниже. Причина, по которой я использовал класс для TR, потому что для некоторых согласованных вариантов может быть несколько строк.

JS

$("#mySelector").change(function(){ 
    opt = $(this).val(); 
    if(opt != "") { 
     $("." + opt).show(); 
    } else { 
     $("#myTbl tr:not(first-child)").hide(); 
    } 
}); 

HTML

<table id="myTbl"> 
<tr> 
    <td> 
    <select id="mySelector"> 
    <option> select one 
    <option value="val1"> v1 
    <option value="val2"> v12 
    <option value="val3"> v3 
    </selector> 
    </td> 
</tr> 
<tr class="val1"> 
    <td> 
    asdasd 1 
    </td> 
</tr> 

<tr class="val2"> 
    <td> 
    asdasd 2 
    </td> 
</tr> 

<tr class="val3"> 
    <td> 
    asdasd 3 
    </td> 
</tr> 
</table> 

Похоже, он должен работать, но это не так. Что мне не хватает?

+1

Есть много способов фильтрации .. Вы также можете попробовать '$ (" # myTbl Tr: GT (0) "). Hide();' (ничего не отличается от других) –

+0

Я предпочитаю ': gt (0)', потому что для этого требуется меньше кода и его легче читать. –

+0

@KevinB, тогда я покажу свой удаленный ответ;) –

ответ

7

Вы пропустили : перед first-child

$("#myTbl tr:not(:first-child)").hide(); 
+0

Не должно быть '$ (" # myTbl tr: not (: first) ");'? –

+0

Первый ребенок должен работать (не тестировался) в этом случае, так как это будет первый ребенок из содержащего tbody или table. –

+0

мм Я думаю, что он возьмет 'first-child'' tr' .. –

3
$("#myTbl tr:not(:eq(0))").hide(); 

Или:

$("#myTbl tr:not(:first)").hide(); 

Вам нужно добавить атрибут значение для первого <option>:

<select id="mySelector"> 
<option value=""> select one // <<<<====== 
<option value="val1"> v1 
<option value="val2"> v12 
<option value="val3"> v3 
</select> // Not </selector> 

Live DEMO


Обратите внимание, что opt = $(this).val();
должно быть this.value хорошее, чистое, чистое и быстрое.

3

попробовать что-то, как показано ниже,

$("#mySelector").change(function(){ 
    var opt = $(this).val(); 
    if(opt != "") { 
     $("." + opt).show(); 
    } else { 
     $("#myTbl tr:gt(0)").hide(); 
    } 
});