2009-02-09 12 views
6

Tytuł prawie wszystko mówi.
Biorąc pod uwagę tabelę jakjQuery - jak wybrać tr, który zawiera th?

<table> 
    <tr> 
    <th>Header 1</td> 
    <th>Header 2</td> 
    </tr> 
    <tr> 
    <td>Datum 1</td> 
    <td> Datum 2</td> 
    </tr> 
    <tr> 
    <td>Datum 1</td> 
    <td> Datum 2</td> 
    </tr> 
</table> 

Jak wybrać wiersz, który zawiera th nagłówki i żadna inna?

Odpowiedz

24

Expression:

$(function() { 
    $("tr:has(th):not(:has(td))").hide(); 
}); 

lub nawet tylko:

$(function() { 
    $("tr:not(:has(td))").hide(); 
}); 

Pełny przykład:

<html> 
<head> 
    <title>Layout</title> 
</head> 
<body> 
<table> 
    <tr> 
    <th>Header 1</td> 
    <th>Header 2</td> 
    </tr> 
    <tr> 
    <td>Datum 1</td> 
    <td> Datum 2</td> 
    </tr> 
    <tr> 
    <td>Datum 1</td> 
    <td> Datum 2</td> 
    </tr> 
    <tr> 
    <th>Header 3</th> 
    <th>Datum 2</td> 
    </tr> 
</table> 
<script src="http://www.google.com/jsapi"></script> 
<script> 
    google.load("jquery", "1.3.1"); 
    google.setOnLoadCallback(function() { 
    $(function() { 
     $("tr:has(th):not(:has(td))").hide(); 
    }); 
    }); 
</script> 
</body> 
</html> 
+3

jQuery jest friggin niesamowite. To wszystko. –

4
jQuery("tr:has(th)") 

wybierze każdy tr że zawiera co najmniej jeden th

kthxbye :)

2

pomocą przełącznika :has:

$('tr:has(th)').addClass('sample') 

Prawdopodobnie nie będzie działać, jeśli masz tabelę z mieszanymi th i td dzieci.

7

Jeśli to możliwe, to byłoby idealne do załączyć nagłówek tabeli wewnątrz <THEAD> element

<table> 
    <thead> 
     <tr> 
      <th></th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td></td> 
     </tr> 
    </tbody> 
</table> 

ten sposób, wybierając nagłówek tabeli byłoby tak proste, jak:

$('thead'); 

lub wybranie tylko <TR>

$('thead tr'); 

znaczników byłby wtedy bardziej czytelne i stylizacji Twój stół staje się łatwiejszy, ponieważ łatwiej możesz kierować elementy w nagłówku lub treści stołu.

Powiązane problemy