html-リンクのようなテーブル行


101

テーブルの行を何かへのリンクとして設定できません。私はcssとhtmlしか使用できません。行のdivから別のdivまでさまざまなことを試しましたが、それでも機能しません。

回答:


175

これには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


8
OPは「cssとhtmlのみ」と言っていたので、2番目の回答に対する同意があったと思います。border = 0がない場合、テーブルセル間に「ミッシングリンク」ギャップが生じることに注意してください。
システムの一時停止

1
IIRCテーブルセルは折りたたむ必要がありますが、境界線を付けることができます。
エステバンキューバー

5
<a>タグは、タグ内の他のhtml要素を許可しません。次に、より多くのテーブルデータを持つテーブル行全体をリンクするにはどうすればよいですか?このようなもの:<tr> <a href=""> <td> Text </ td> <td> ..... </a> </ tr> ..このようなneはありませんか?
アビマランクガタサン2011

4
ブロックの代わりに「display:inline-block」を使用することをお勧めします。ブロック表示で、Chromeは「height:100%」を無視しており、同じ行に他のアイテムよりも高さが高い場合、<td>の高さ全体をクリック可能にしないことがわかりました。インラインブロックにすることで、この問題が修正されました。また、テーブル要素内でテキストがクリッピングされるという関連する問題も修正されました。
12

2
アンカーの列間にはまだデッドスペースがあります(Google Chromeバージョン40.0.2214.115 mでテスト済み)
Yuri

55

私は自分でカスタムjquery関数を作成しました。

HTML

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

jQuery

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

簡単で完璧です。うまくいけば、それはあなたを助けます。

(私はOPがCSSとHTMLのみを望んでいることを知っていますが、jQueryを検討します)

編集する

データ属性を使用してMatt Kantorと合意しました。上記の編集された回答


それは実際にはかなりエレガントです。W3C標準では無効なHTMLと見なされているのでしょうか。
Mahn、2012年

14
私はそのようなものを使用しますdata-href
Matt Kantor

2
404にJSFiddleリンクリード
FLOX

1
最高の使用法のためにクラスを追加<table class='tr_link' >.tr_link{cursor:pointer}てCSSでそれを与えます。
バゴバ2016年

6
ホバリングで手の効果を追加tr[data-href] { cursor: pointer }するには、スタイルシートに追加します
OverCoder

27

それをサポートするブラウザーを使用している場合は、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>


1
ありがとうございます。Opera 8.5 /、Firefox 0.8 /、IE8、iPhone Simulator / Safari / very oldで動作するようです:)
biziclop '26

1
CSSテーブルが現在のすべてのブラウザーでサポートされている場合、これは開発者が採用しようとするテクニックです。caniuse.com / #feat = css-table 唯一の問題は、Bootstrapでこれを使用できないことです!: '(
shangxiao

13

テーブル使用する必要がある場合は、各テーブルセルにリンクを配置できます。

<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 */
}

1
表形式のデータを表示する場合は、常に表を使用してください。divとspanのコレクションを使用すると、意味的に正しくないため、CSSを失うとコンテンツが読みにくくなり、スクリーンリーダーを使用するユーザーがアクセスできなくなります。
gulima 2012年

12

通常の方法は、いくつかのJavaScriptを割り当てることですonClickの属性TR要素のです。

JavaScriptを使用できない場合は、トリックを使用する必要があります。

  1. TD同じ行のそれぞれに同じリンクを追加します(リンクはセルの最も外側の要素でなければなりません)。

  2. リンクをブロック要素に変換します。 a { display: block; width: 100%; height: 100%; }

後者はリンクを強制的にセル全体に埋めるので、どこかをクリックするとリンクが呼び出されます。


7

<td>要素を<a>タグでラップすることはできませんが、onclickイベントを使用して関数を呼び出すことにより、同様の機能を実現できます。この関数のような例がここにあります:

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

次のようにテーブルに追加します。

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

21
この種の目的でonClickを使用する際の問題の1つは、ユーザーが中マウスボタンまたはコントロールクリックを使用してリンクを新しいタブで開くことができなくなることです(この方法でリンクを開くことを愛する私たちにとっては、本当にイライラすることがあります)。 。もう1つの注意点は、1つの単純なコマンドだけを実行する関数を作成することによって複雑にする理由はありません。これを行う場合は、onclick属性に「document.location.href = ...」を直接入力します。
12

7

サーウィリアムからの回答が私に最もよく合います。ホットキーCtrl + LeftClick(新しいタブでページを開く)をサポートすることで、JavaScriptを改善しました。イベントctrlKeyはPC、metaKeyMacで使用されます。

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

http://jsfiddle.net/vlastislavnovak/oaqo2kgs/


良い。Ctrl + LeftClickはUIXを壊しません
Yuri

それでも「右クリック->新しいタブで開く」または「新しいウィンドウで開く」が
失われる

4

この質問はすでに回答済みですが、このページの解決策はまだ好きではありません。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>

純粋なjsにとても近い。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; } });
Ramon Bakker

1
バニラjsで利用できなかった2014年に、あなたはガキを台無しにしました; P。
botenvouwer 2019

2

<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


1

これにより、リンクをtrに複製する必要がなくなります。最初のaからリンクを外すだけです。

$(".link-first-found").click(function() {
 var href;
href = $(this).find("a").attr("href");
if (href !== "") {
return document.location = href;
}
});

0
//Style
  .trlink {
    color:blue;
  }
  .trlink:hover {
    color:red;
  }

<tr class="trlink" onclick="function to navigate to a page goes here">
<td>linktext</td>
</tr>

これらの線に沿った何か?JSを使用しますが、それが行(tr)をクリック可能にする唯一の方法です。

セル全体を埋めるアンカータグを持つ単一のセルがない限り。

そして、とにかくテーブルを使用するべきではありません。


0

このスレッドと他のいくつかを読んだ後、私は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の場合と同様にリンクとして完全に動作display: table;せず、キーボードで選択したり、ステータステキストが表示されないことです。編集:onkeydown、role、tabIndexを設定してキーボードナビゲーションを機能させました。マウスのみが必要な場合は、その部分を削除できます。ただし、ホバー時にステータスバーにURLが表示されません。

"tr [href]" CSSセレクターを使用して、リンクTRを具体的にスタイルできます。


0

別の方法があります。特に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に変数を設定します。変数は、これからページを読み取り、操作できます。

ウィンドウの場所に直接投稿する方法が本当に欲しいのですが、可能ではないと思います。


0

これをありがとう。次のようにCSSクラスを行に割り当てることにより、ホバーアイコンを変更できます。

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

そしてCSSは次のようになります:

<style>
    .pointer { cursor: pointer; }
</style>

-2

行にAタグを追加できますか?

<tr><td>
<a href="./link.htm"></a>
</td></tr>

これはあなたが求めていることですか?


1
いいえ、すべての行領域をクリックする必要があります。
Max Frai
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.