2011-01-08 12 views
13

Mam tabelę z wierszem tabeli <tr> generowania w pętli, aby utworzyć wiele wierszy.Jak dodać hiperłącze do wiersza tabeli <tr>

Chcę podać osobny link <a> do każdego <tr>. Ponieważ w tabeli możemy dodawać tylko dodawać dane tylko do <td>, nie jestem w stanie tego osiągnąć.

Czy jest jakikolwiek inny sposób, aby to osiągnąć. Eksperci Proszę o pomoc

+1

Dla PHP tylko naprawić, wystarczy dodać link, który ma dla każdego wiersza do każdej komórki w tym wierszu. – Drew

+5

Andrew, jak to jest naprawić tylko w PHP? – ClosureCowboy

Odpowiedz

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 używając jQuery Biblioteka:

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

Można spróbować to tutaj: http://jsbin.com/ikada3

CSS (opcjonalnie):

table tr { 
    cursor: pointer; 
} 

LUB HTML obowiązuje wersja z data-href zamiast 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

Jedyny problem z tym związany to fakt, że href nie jest technicznie poprawnym atrybutem wiersza tabeli. –

+1

To rozwiązanie nie działa bez JavaScriptu i nie jest dostępne dla niewidomych. –

+5

Użycie 'data-href' naprawiłoby problem z niepoprawnymi atrybutami. –

2

Jeśli mówisz, że chcesz, aby każdy <tr> klikalne, można dodać do każdego zdarzenia click<tr>, lub jeszcze lepiej, dodać .delegate() obsługi do table która zarządza kliknięcia jego <tr> elementów.

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

Kod ten zakłada swój table ma myTable ID:

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

Jeśli to nie to, co masz na myśli to, to proszę wyjaśnić swoje pytanie i dodaj odpowiedni kod javascript używasz.

+0

+1 dla delegacji – BiAiB

+0

Dla tych przeczytaniu tego od jQuery 1.7: "Jako jQuery 1.7, .delegate() została zastąpiona przez metodę .on()." http://api.jquery.com/delegate/ – gonzo

1

Zgadzam się z pierwszą odpowiedzią, potrzebuję więcej informacji. Ale jeśli jesteś po prostu staramy się spis linków, można po prostu zrobić

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

Sugestia premia byłoby dodać tagi podczas generowania tabeli.Jeśli trzeba to zrobić po tabela jest renderowane i chcesz używać JavaScript zawsze można dodać coś takiego

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>"; 
} 

lub jeśli trzeba to zrobić do każdej komórki, Twój może zawsze

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>"; 
    } 
} 

mam nadzieję, że to pomocne

1

PHP:

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

Javascript bez jQuery:

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

pozwoli kliknięcie użytkownika na każdym rzędzie można użyć tablicę do załadowania strony zbyt:

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 zwrócony kotwica do td a następnie dodać do tr i jQuery.appendTotable

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

Możesz po prostu genować w środku, tak jak sugerowała Nicole:

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

Albo umieścić adres URL w tagu tr jak z jQuery zawarte

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

doprowadzić cię do tej strony na kliknięcie (w zasadzie hacking tr do pracy jak Tag (tylko myśl, nigdy tak naprawdę nie próbuj.

0

dodać

i zmienić styl wyświetlania na display: block

i dodać tę samą wielkość dla takiego:

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

Playing off @ ahmet2016 i utrzymanie jej standardy 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

Mam problem z 'href' i' data-href': jeśli wybiorę z jquery '$ ('table tr'). First()' wtedy atrybuty 'href' lub' data-href' znika, więc nie ma do nich dostępu poprzez '.attr ('href')' lub 'data ('href')' – static

8

Najprostszym sposobem znalazłem włączyć wiersz tabeli pod linkiem jest użycie onclick atrybut z window.location.

<table> 
<tr onclick="window.location='/just/a/link.html'"> 
<td></td> 
</tr> 
</table> 
Powiązane problemy