回答:
これには2つの方法があります。
JavaScriptの使用:
<tr onclick="document.location = 'links.html';">
アンカーを使用する:
<tr><td><a href="">text</a></td><td><a href="">text</a></td></tr>
私は2番目の作品を使って:
table tr td a {
display:block;
height:100%;
width:100%;
}
列間のデッドスペースを取り除くには:
table tr td {
padding-left: 0;
padding-right: 0;
}
ここでは第二の例の簡単なデモは次のとおりです。DEMO
私は自分でカスタムjquery関数を作成しました。
<tr data-href="site.com/whatever">
$('tr[data-href]').on("click", function() {
document.location = $(this).data('href');
});
簡単で完璧です。うまくいけば、それはあなたを助けます。
(私はOPがCSSとHTMLのみを望んでいることを知っていますが、jQueryを検討します)
データ属性を使用してMatt Kantorと合意しました。上記の編集された回答
data-href
。
<table class='tr_link' >
し.tr_link{cursor:pointer}
てCSSでそれを与えます。
tr[data-href] { cursor: pointer }
するには、スタイルシートに追加します
それをサポートするブラウザーを使用している場合は、CSSを使用<a>
してをテーブル行に変換できます。
.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>
もちろん、ブロック要素を内に配置しないことに制限されます<a>
。これを通常のものと混ぜることもできません<table>
テーブルを使用する必要がある場合は、各テーブルセルにリンクを配置できます。
<table>
<tbody>
<tr>
<td><a href="person1.html">John Smith</a></td>
<td><a href="person1.html">123 Fake St</a></td>
<td><a href="person1.html">90210</a></td>
</tr>
<tr>
<td><a href="person2.html">Peter Nguyen</a></td>
<td><a href="person2.html">456 Elm Ave</a></td>
<td><a href="person2.html">90210</a></td>
</tr>
</tbody>
</table>
そして、リンクがセル全体を埋めるようにします。
table tbody tr td a {
display: block;
width: 100%;
height: 100%;
}
<div>
テーブルの代わりにs を使用できる場合、HTMLははるかに単純になる可能性があり、テーブルセル間のリンクに「ギャップ」が生じません。
<div class="myTable">
<a href="person1.html">
<span>John Smith</span>
<span>123 Fake St</span>
<span>90210</span>
</a>
<a href="person2.html">
<span>Peter Nguyen</span>
<span>456 Elm Ave</span>
<span>90210</span>
</a>
</div>
<div>
メソッドに対応するCSSは次のとおりです。
.myTable {
display: table;
}
.myTable a {
display: table-row;
}
.myTable a span {
display: table-cell;
padding: 2px; /* this line not really needed */
}
<td>
要素を<a>
タグでラップすることはできませんが、onclick
イベントを使用して関数を呼び出すことにより、同様の機能を実現できます。この関数のような例がここにあります:
<script type="text/javascript">
function DoNav(url)
{
document.location.href = url;
}
</script>
次のようにテーブルに追加します。
<tr onclick="DoNav('http://stackoverflow.com/')"><td></td></tr>
サーウィリアムからの回答が私に最もよく合います。ホットキーCtrl + LeftClick(新しいタブでページを開く)をサポートすることで、JavaScriptを改善しました。イベントctrlKey
はPC、metaKey
Macで使用されます。
Javascript
$('body').on('mousedown', 'tr[url]', function(e){
var click = e.which;
var url = $(this).attr('url');
if(url){
if(click == 2 || (click == 1 && (e.ctrlKey || e.metaKey))){
window.open(url, '_blank');
window.focus();
}
else if(click == 1){
window.location.href = url;
}
return true;
}
});
例
この質問はすでに回答済みですが、このページの解決策はまだ好きではありません。JQueryを使用する人のために、テーブル行に<a>
タグとほぼ同じ動作を与えることができる最終的なソリューションを作成しました。
これは私の解決策です:
jQuery これを、たとえば標準で組み込まれているJavaScriptファイルに追加できます。
$('body').on('mousedown', 'tr[url]', function(e){
var click = e.which;
var url = $(this).attr('url');
if(url){
if(click == 1){
window.location.href = url;
}
else if(click == 2){
window.open(url, '_blank');
window.focus();
}
return true;
}
});
HTML これで<tr>
、HTML内の任意の要素でこれを使用できます
<tr url="example.com">
<td>value</td>
<td>value</td>
<td>value</td>
<tr>
document.querySelector('tr[url]').addEventListener("mousedown", function(e){ var click = e.which; var url = this.getAttribute("url"); if(url){ if(click == 1){ window.location.href = url; } else if(click == 2){ window.open(url, '_blank'); window.focus(); } return true; } });
<tr>
リンクを使用してをシミュレートしたいがHTML標準を尊重したい場合は、これを行います。
HTML:
<table>
<tr class="trLink">
<td>
<a href="#">Something</a>
</td>
</tr>
</table>
CSS:
tr.trLink {
cursor: pointer;
}
tr.trLink:hover {
/*TR-HOVER-STYLES*/
}
tr.trLink a{
display: block;
height: 100%;
width: 100%;
}
tr.trLink:hover a{
/*LINK-HOVER-STYLES*/
}
このようにして、誰かがTRの上でマウスを使用すると、すべての行(およびこのリンク)がホバースタイルを取得し、複数のリンクがあることを確認できません。
希望は誰かを助けることができます。
フィドルHERE
このスレッドと他のいくつかを読んだ後、私はjavascriptで次の解決策を思いつきました:
function trs_makelinks(trs) {
for (var i = 0; i < trs.length; ++i) {
if (trs[i].getAttribute("href") != undefined) {
var tr = trs[i];
tr.onclick = function () { window.location.href = this.getAttribute("href"); };
tr.onkeydown = function (e) {
var e = e || window.event;
if ((e.keyCode === 13) || (e.keyCode === 32)) {
e.preventDefault ? e.preventDefault() : (e.returnValue = false);
this.click();
}
};
tr.role = "button";
tr.tabIndex = 0;
tr.style.cursor = "pointer";
}
}
}
/* It could be adapted for other tags */
trs_makelinks(document.getElementsByTagName("tr"));
trs_makelinks(document.getElementsByTagName("td"));
trs_makelinks(document.getElementsByTagName("th"));
これを使用するには、次のように、クリック可能にしたいhrefをtr / td / thに入れます<tr href="http://stackoverflow.com">
。そして、上記のスクリプトがtr要素が作成された後に(その配置またはイベントハンドラーを使用して)実行されることを確認してください。
欠点は、TRがdivの場合と同様にリンクとして完全に動作編集:onkeydown、role、tabIndexを設定してキーボードナビゲーションを機能させました。マウスのみが必要な場合は、その部分を削除できます。ただし、ホバー時にステータスバーにURLが表示されません。display: table;
せず、キーボードで選択したり、ステータステキストが表示されないことです。
"tr [href]" CSSセレクターを使用して、リンクTRを具体的にスタイルできます。
別の方法があります。特にjQueryを使用してデータを投稿する必要がある場合
$(document).on('click', '#tablename tbody tr', function()
{
var test="something";
$.post("ajax/setvariable.php", {ID: this.id, TEST:test}, function(data){
window.location.href = "http://somepage";
});
});
Set variableは、SESSIONSに変数を設定します。変数は、これからページを読み取り、操作できます。
ウィンドウの場所に直接投稿する方法が本当に欲しいのですが、可能ではないと思います。