2011-01-08 28 views
13

Estoy teniendo una tabla con su fila de tabla <tr> generando en un bucle para formar varias filas.Cómo agregar un hipervínculo a la fila de la tabla <tr>

Quiero dar separadamente <a> enlace a cada <tr>. Como en la tabla solo podemos agregar datos agregados a <td>, no puedo lograr eso.

¿Hay alguna otra manera de lograr esto. Los expertos ayudan a favor

+1

Para un PHP-único arreglo, sólo tiene que añadir el enlace que desea para cada fila a cada célula dentro de esa fila. – Drew

+5

Andrew, ¿cómo es eso una solución solo PHP? – ClosureCowboy

Respuesta

28

HTML:

<table> 
    <tr href="http://myspace.com"> 
     <td>MySpace</td> 
    </tr> 
    <tr href="http://apple.com"> 
     <td>Apple</td> 
    </tr> 
    <tr href="http://google.com"> 
     <td>Google</td> 
    </tr> 
</table> 

JavaScript usando jQuery Biblioteca:

$(document).ready(function(){ 
    $('table tr').click(function(){ 
     window.location = $(this).attr('href'); 
     return false; 
    }); 
}); 

puede probar esta aquí: http://jsbin.com/ikada3

CSS (opcional):

table tr { 
    cursor: pointer; 
} 

o la versión válida HTML con data-href en lugar de href:

<table> 
    <tr data-href="http://myspace.com"> 
     <td>MySpace</td> 
    </tr> 
    <tr data-href="http://apple.com"> 
     <td>Apple</td> 
    </tr> 
    <tr data-href="http://google.com"> 
     <td>Google</td> 
    </tr> 
</table> 

JS:

$(document).ready(function(){ 
    $('table tr').click(function(){ 
     window.location = $(this).data('href'); 
     return false; 
    }); 
}); 

CSS:

table tr[data-href] { 
    cursor: pointer; 
} 
+1

El único problema que tengo con esto es que href no es un atributo técnicamente válido de una fila de tabla. –

+1

Esta solución no funciona sin javascript y no es accesible para personas ciegas. –

+5

El uso de 'data-href' solucionaría el problema con atributos no válidos. –

2

Si usted está diciendo que quiere hacer cada <tr> puede hacer clic, se puede añadir un evento a cada click<tr>, o mejor aún, agregar un controlador .delegate() a la table que administra clics en sus <tr> elementos.

$('#myTable').delegate('tr','click',function() { 
    alert('i was clicked'); 
}); 

Este código se supone que su table tiene la myTable ID:

<table id="myTable"> 
    <tr><td> cell </td></tr> 
    <tr><td> cell </td></tr> 
</table> 

Si esto no es lo que quería decir, por favor, aclarar su pregunta, y enviar el código Javascript relevante que esté utilizando.

+0

+1 para delegación – BiAiB

+0

Para aquellos que leen esto desde jQuery 1.7: "A partir de jQuery 1.7, .delegate() ha sido reemplazado por el método .on()". http://api.jquery.com/delegate/ – gonzo

1

Acepto la primera respuesta, se necesita más información. Pero si usted está tratando de hacer una tabla de enlaces, que sólo puede hacer

<tr><td><a href="...">...</a></td></tr> 
1

La sugerencia prima habría que añadir las etiquetas cuando se genera la tabla.Si tiene que hacerlo después de la tabla se representa y desea usar javascript siempre se puede añadir algo como

var mytable = document.getElementById("theTable") 
var myrows = mytable.rows 

for(i=0;i < myrows.length;i++) 
{ 
    var oldinner; 
    oldinner = myrows[i].cells[0].innerHTML; 
    myrows[i].cells[0].innerHTML = "<a>" + oldinner + "</a>"; 
} 

o si necesita hacerlo para cada célula, su puede siempre

var mytable = document.getElementById("theTable") 
var myrows = mytable.rows 

for(i=0;i < myrows.length;i++) 
{ 
    mycells = myrows[i].cells; 

    for(a=0;a < mycells.length;a++) 
    { 
    var oldinner; 
    oldinner = mycells[a].innerHTML; 
    mycells[a].innerHTML = "<a>" + oldinner + "</a>"; 
    } 
} 

espero que ha resultado útil

1

PHP:

echo "<tr onclick=\"window.location='".$links[$i]."'\">......"; 

Javascript sin jQuery:

x=1; 
. 
. 
for (...) { 
    var tr=document.createElement('tr'); 
    tr.onclick=function() { window.location='page'+(x++)+'.html'} 
    tr.style.cursor='pointer'; 
. 
} 

permitirá que el usuario haga clic en cada fila se puede utilizar una matriz para cargar las páginas demasiado:

x=0; 
var pages=["pagea.html","pageb.html"] 
. 
. 
for (...) { 
    var tr=document.createElement('tr'); 
    tr.onclick=function() { window.location=page[x++];} 
    tr.style.cursor='pointer'; 
. 
} 
0

jQuery.wrap el ancla vuelto a una td y luego añadir a tr y jQuery.appendTotable

$('ith anchor element in array').wrap('<td />').wrap('<tr />').appendTo('table#table_id'); 
0

Puede simplemente generar el interior con y como Nicole sugirió:

<tr><td><a href="url">title of the url</a></td></tr> 

O poner la url de la etiqueta tr como con jQuery incluido

$('tr.clickable').click(function(){ 
    window.location = $(this).attr("title"); 
}); 

que le llevará a la página en clic (básicamente la piratería un tr para funcionar como una etiqueta (sólo un pensamiento, nunca lo intente realmente

0

añadir en

y cambiar el estilo de visualización de pantalla: bloque

y añadir mismo tamaño para de esta manera:

CSS:

#Table a { 
display:block; 
} 
#Table td { 
width:100px; 
hright:100px 
} 

HTML:

<table id="Table"> 
    <tr><td><a onclick="" href="#"> cell </a></td></tr> 
    <tr><td> cell </td></tr> 
</table> 
9

Jugar fuera de @ ahmet2016 y mantenerlo estándar del W3C.

HTML:

<tr data-href='LINK GOES HERE'> 
    <td>HappyDays.com</td> 
</tr> 

CSS:

*[data-href] { 
    cursor: pointer; 
} 

jQuery:

$(function(){  
    $('*[data-href]').click(function(){ 
     window.location = $(this).data('href'); 
     return false; 
    }); 
}); 
+0

Tengo un problema con 'href' y' data-href': si selecciono con jquery '$ ('table tr'). First()', los atributos 'href' o' data-href' desaparecen, entonces no puede acceder a ellos a través de '.attr ('href')' o 'data ('href')' – static

8

La manera más fácil que he encontrado para convertir una fila de la tabla en un enlace es el uso de la atributo onclick con window.location.

<table> 
<tr onclick="window.location='/just/a/link.html'"> 
<td></td> 
</tr> 
</table> 
Cuestiones relacionadas