106 votes

html - ligne du tableau comme un lien

Je ne peux pas définir la ligne de mon tableau comme un lien vers quelque chose. Je ne peux utiliser que du css et du html. J'ai essayé différentes choses, de div dans la rangée à autre chose, mais je n'arrive toujours pas à le faire fonctionner.

180voto

voyager Points 17283

Vous avez deux façons de le faire :

  • Utilisation de javascript :

    <tr onclick="document.location = 'links.html';">

  • Utilisation d'ancrages :

    <tr><td><a href="">text</a></td><td><a href="">text</a></td></tr>

J'ai fait le second travail en utilisant :

table tr td a {
    display:block;
    height:100%;
    width:100%;
}

Pour supprimer l'espace mort entre les colonnes :

table tr td {
    padding-left: 0;
    padding-right: 0;
}

Voici une démonstration simple du deuxième exemple : DEMO

10 votes

Puisque le PO a dit "seulement css et html", je suppose que l'acceptation était pour la deuxième réponse. Notez que si vous n'avez pas border=0, vous obtiendrez un vide "chaînon manquant" entre les cellules du tableau.

1 votes

IIRC les cellules du tableau doivent simplement être réduites, mais peuvent avoir une bordure.

5 votes

La balise <a> n'autorise pas d'autres éléments html à l'intérieur. Alors, comment pouvons-nous lier une ligne entière de tableau qui a plus de données de tableau ? Quelque chose comme ceci : <tr> <a href=""><td>Text</td><td>.....</a></tr>.. We can't have like this ne?

55voto

Bondye Points 4513

Je me suis fait une fonction jquery personnalisée :

Html

<tr data-href="site.com/whatever">

jQuery

$('tr[data-href]').on("click", function() {
    document.location = $(this).data('href');
});

Facile et parfait pour moi. J'espère que cela vous aidera.

(Je sais que le PO ne veut que du CSS et du HTML, mais pensez à jQuery).

Modifier

D'accord avec Matt Kantor qui utilise data attr. Réponse éditée ci-dessus

0 votes

C'est assez élégant en fait. Je me demande si c'est considéré comme du html invalide par les normes W3C.

15 votes

J'utiliserais data-href ou quelque chose comme ça.

2 votes

Le lien JSFiddle mène à 404.

29voto

Greg Points 132247

Si vous utilisez un navigateur qui le prend en charge, vous pouvez utiliser les feuilles de style en cascade (CSS) pour transformer l'adresse de l'utilisateur. <a> dans une ligne du tableau :

.table-row { display: table-row; }
.table-cell { display: table-cell; }

<div style="display: table;">
    <a href="..." class="table-row">
        <span class="table-cell">This is a TD... ish...</span>
    </a>
</div>

Bien sûr, vous êtes limité à ne pas mettre d'éléments de bloc à l'intérieur de la balise <a> . Vous ne pouvez pas non plus le mélanger avec un produit ordinaire. <table>

1 votes

Bonne idée, merci ! Cela semble fonctionner sur Opera 8.5/, Firefox 0.8/, IE8, iPhone Simulator/Safari/très vieux :)

1 votes

C'est la technique que les développeurs devraient essayer d'adopter étant donné que les tableaux CSS sont pris en charge par tous les navigateurs actuels : caniuse.com/#feat=css-table Le seul problème est que je ne peux pas l'utiliser avec Bootstrap !

12voto

Aaron Digulla Points 143830

La méthode habituelle consiste à assigner du JavaScript à la fonction onClick de l'attribut TR élément.

Si vous ne pouvez pas utiliser JavaScript, alors vous devez utiliser une astuce :

  1. Ajoutez le même lien à chaque TD de la même ligne (le lien doit être l'élément le plus extérieur de la cellule).

  2. Transformez les liens en éléments de bloc : a { display: block; width: 100%; height: 100%; }

Cette dernière option forcera le lien à remplir toute la cellule, de sorte qu'en cliquant n'importe où, le lien sera invoqué.

6voto

Donut Points 32892

Vous ne pouvez pas envelopper un <td> avec un élément <a> mais vous pouvez réaliser une fonctionnalité similaire en utilisant la balise onclick pour appeler une fonction. Voici un exemple ici quelque chose comme cette fonction :

<script type="text/javascript">
function DoNav(url)
{
   document.location.href = url;
}
</script>

Et ajoutez-le à votre table comme ceci :

<tr onclick="DoNav('http://stackoverflow.com/')"><td></td></tr>

21 votes

L'un des problèmes liés à l'utilisation de onClick dans ce type d'objectif est que les utilisateurs ne peuvent plus utiliser le bouton central de la souris ou le contrôle-clic pour ouvrir des liens dans un nouvel onglet (ce qui peut être vraiment frustrant pour ceux d'entre nous qui aiment ouvrir des liens de cette façon). Une autre remarque : il n'y a aucune raison de compliquer les choses en créant une fonction qui ne fait qu'une seule commande simple. Si vous devez le faire, mettez simplement "document.location.href=..." directement dans l'attribut onclick.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X