html-링크와 같은 테이블 행


101

내 테이블 행을 무언가에 대한 링크로 설정할 수 없습니다. CSS와 html 만 사용할 수 있습니다. 나는 div에서 다른 것을 시도했지만 여전히 작동하지 않습니다.

답변:


175

이를 수행하는 두 가지 방법이 있습니다.

  • 자바 스크립트 사용 :

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

  • 앵커 사용 :

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

두 번째 작업은 다음을 사용하여 만들었습니다.

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

열 사이의 데드 스페이스를 제거하려면 다음을 수행하십시오.

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

다음은 두 번째 예제의 간단한 데모입니다. DEMO


8
OP가 "only css and html"이라고 말 했으므로 두 번째 대답에 대한 수락이라고 가정합니다. border = 0이 없으면 테이블 셀 사이에 "누락 된 링크"간격이 생깁니다.
시스템 PAUSE

1
IIRC 테이블 셀을 축소해야하지만 테두리가있을 수 있습니다.
Esteban Küber

5
<a> 태그는 그 안에 다른 html 요소를 허용하지 않습니다. 그러면 더 많은 테이블 데이터가있는 전체 테이블 행을 어떻게 연결할 수 있습니까? 다음과 같은 형식 : <tr> <a href=""> <td> 텍스트 </ td> <td> ..... </a> </ tr> .. 우리는이 ne를 좋아할 수 없습니까?
Abimaran Kugathasan

4
블록 대신 "display : inline-block"을 사용하는 것이 좋습니다. 블록 표시를 사용하면 Chrome이 "height : 100 %"를 무시하고 같은 행에 더 큰 높이를 가진 다른 항목이있는 경우 실제로 <td>의 전체 높이를 클릭 할 수 없게 만드는 것을 발견했습니다. 인라인 블록으로 만들면 해당 문제가 해결되었으며 테이블 요소 내부에서 텍스트가 잘리는 관련 문제도 해결되었습니다.
orrd

2
앵커는 여전히 열 사이에 죽은 공간이 있습니다 (Google Chrome 버전 40.0.2214.115m로 테스트 됨)
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

14
나는 data-href또는 어떤 것을 사용할 것 입니다.
Matt Kantor 2012

2
JSFiddle 링크는 404로 연결됩니다.
Flox 2015 년

1
최상의 사용을 위해 클래스를 추가 하고 CSS로 <table class='tr_link' >제공하십시오 .tr_link{cursor:pointer}.
Bagova

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

1
CSS 테이블이 현재의 모든 브라우저에서 지원된다는 점을 감안할 때 개발자가 채택하려고하는 기술이어야합니다. caniuse.com/#feat=css-table 유일한 문제는 이것을 부트 스트랩에서 사용할 수 없다는 것입니다! : '(
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 및 스팬 모음을 사용하는 것은 의미 상 부정확하며, CSS를 잃어 버리면 콘텐츠를 읽기 어렵고 스크린 리더를 사용하는 사람이 사용할 수 없게됩니다.
gulima

12

일반적인 방법은 요소 의 onClick속성에 일부 JavaScript를 할당하는 것입니다 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을 사용할 때 발생하는 문제 중 하나는 사용자가 더 이상 가운데 마우스 버튼이나 control-click을 사용하여 새 탭에서 링크를 열 수 없다는 것입니다 (그런 방식으로 링크를 여는 것을 좋아하는 사람들에게는 정말 실망 스러울 수 있습니다). . 한 가지 다른 참고 사항은 하나의 간단한 명령 만 수행하는 함수를 생성하여 일을 복잡하게 만들 이유가 없다는 것입니다. 이렇게하려면 onclick 속성에 "document.location.href = ..."를 직접 입력하면됩니다.
orrd

7

sirwilliam의 답변이 가장 적합합니다. 단축키 Ctrl + LeftClick (새 탭에서 페이지 열기)을 지원하여 자바 스크립트를 개선했습니다. 이벤트 ctrlKey는 PC, metaKeyMac 에서 사용됩니다 .

자바 스크립트

$('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

1
여전히 '오른쪽 클릭-> 새 탭에서 열기'또는 '새 창에서 열기'가
손실 됨

4

이 질문에 이미 답변이 있음을 알고 있지만 여전히이 페이지의 해결책이 마음에 들지 않습니다. JQuery를 사용하는 사람들을 위해 테이블 ​​행에 <a>태그 와 거의 동일한 동작을 제공 할 수있는 최종 솔루션을 만들었습니다 .

이것이 내 해결책입니다.

jQuery 예를 들어 표준 포함 자바 스크립트 파일에 이것을 추가 할 수 있습니다.

$('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 이제 HTML 내부의 모든 <tr>요소 에 사용할 수 있습니다.

<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 2019

1
바닐라 js 에서 사용할 수 없었던 2014 년 에 당신은 brat; P를 망쳤습니다.
botenvouwer

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에 마우스를 올려 놓으면 모든 행 (및이 링크)이 호버 스타일을 갖게되고 여러 링크가 있음을 알 수 없습니다.

희망은 누군가를 도울 수 있습니다.

여기 바이올린


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

이 스레드와 다른 일부를 읽은 후 자바 스크립트에서 다음 솔루션을 생각해 냈습니다.

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

변수 설정은 페이지를 읽고 작업 할 수있는 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.