테이블의 전체 행을 링크로 클릭 가능하게 만드는 방법은 무엇입니까?


436

Bootstrap을 사용하고 있으며 다음이 작동하지 않습니다.

<tbody>
    <a href="#">
        <tr>
            <td>Blah Blah</td>
            <td>1234567</td>
            <td>£158,000</td>
        </tr>
    </a>
</tbody>

2
JavaScript가 더 좋을 것입니다
John Conde

1
그는 부트 스트랩을 사용하고 있기 때문에 그가 할 수 있어야한다고 생각합니다 :)
Ahmed Masud

행 앞에 투명한 A 요소를 넣는 것은 어떻습니까? 그렇게하면 실제 링크의 모든 속성 (상태 표시 줄, 가운데 클릭 등 ...)을 가지며 테이블의 모양을 변경하지 않습니다 (원하는 경우).
David Balažic 2016 년


답변:


568

저자의 노트 I :

아래의 다른 답변, 특히 jquery를 사용하지 않는 답변을 살펴보십시오.

저자의 노트 II :

후손을 위해 보존되었지만 2020 년 에는 틀림없이 잘못된 접근법이었습니다. (2017 년에도 비 관용적이었습니다.)

원래 답변

부트 스트랩을 사용하고 있습니다. 즉 jQuery : ^)를 사용하고 있다는 것을 의미하므로 한 가지 방법은 다음과 같습니다.

<tbody>
    <tr class='clickable-row' data-href='url://'>
        <td>Blah Blah</td> <td>1234567</td> <td>£158,000</td>
    </tr>
</tbody>


jQuery(document).ready(function($) {
    $(".clickable-row").click(function() {
        window.location = $(this).data("href");
    });
});

물론 href 또는 스위치 위치를 사용할 필요가 없으며 클릭 핸들러 기능에서 원하는 모든 작업을 수행 할 수 있습니다. jQuery처리기를 작성하고 작성하는 방법을 읽으십시오 .

사용의 장점 클래스 를 통해 ID가 여러 행에 솔루션을 적용 할 수 있습니다 :

<tbody>
    <tr class='clickable-row' data-href='url://link-for-first-row/'>
        <td>Blah Blah</td> <td>1234567</td> <td>£158,000</td>
    </tr>
    <tr class='clickable-row' data-href='url://some-other-link/'>
        <td>More money</td> <td>1234567</td> <td>£800,000</td>
    </tr>
</tbody>

코드베이스는 변경되지 않습니다. 동일한 핸들러가 모든 행을 처리합니다.

다른 옵션

콜백에서 다음과 같이 Bootstrap jQuery 콜백을 사용할 수 있습니다 document.ready.

$("#container").on('click-row.bs.table', function (e, row, $element) {
    window.location = $element.data('href');
});

이것은 테이블 정렬시 재설정되지 않는 이점이 있습니다 (다른 옵션에서 발생 함).


노트

이것은 게시 window.document.location되었으므로 window.location대신 사용되지 않거나 (최소 더 이상 사용되지 않음) 사용 됩니다.


105
CSS를 사용하여 커서를 변경할 수도 있습니다. tr.clickableRow {cursor : pointer; }
Winston Kotzan

78
이 요소에 유효한 속성이 아니기 때문에 href에 속성을 사용해서는 안된다는 것을 추가하고 싶었습니다 tr. 대신 data-url="{linkurl}"js 코드에서 데이터 속성을 사용하십시오 .$(this).data('url')
Maksim Vi.

12
당신은 각 행에 클래스를 사용하지 않도록, 그리고 클래스 이름으로 테이블을 장식 할 수 있습니다 clickable_row(HTML 표준에 반대하는 낙타 표기법와 소문자이어야한다 (I 크로스 브라우저 문제이와 몇 번)했다) 다음 jQuery를이다 $('.clickable_row tr').click(function ...그러나이 실제로 는 사용자 지정 데이터 사양이기 때문에 data-대신 데이터를 보유하는 데 사용해야합니다 href. data-urljquery는 다음과 같이 액세스합니다$(this).data(url);
Piotr Kula

3
참고 : 가능하면 자바 스크립트를 사용하지 않는 사람들을 위해 tr 어딘가에 링크를 남겨 두어야합니다.
hitautodestruct

47
사용자가 마우스 커서를 가져갈 때 브라우저 하단에 링크 URL이 표시되지 않고 링크를 휠 클릭하여 새 탭에서 열 수 없기 때문에이 솔루션의 큰 팬은 아닙니다. 각 셀 안에 a태그를 삽입하는 display: block;것은 약간 성가신 일이지만이 문제를 해결하는 가장 유용한 방법 인 것 같습니다.
막심 로시니

222

당신은 그렇게 할 수 없습니다. 유효하지 않은 HTML입니다. <a>a <tbody>와 a 사이에를 넣을 수 없습니다 <tr>. 대신 이것을 시도하십시오 :

<tr onclick="window.location='#';">
        ...
     </tr>

포인터보기를위한 스타일 추가

[data-href] { cursor: pointer; }

작업을 수행 할 때 JavaScript를 사용하여 HTML 외부에 클릭 핸들러를 지정하려고합니다.


3
@Aquillo OP는 구체적으로 부트 스트랩을 사용하고 있다고 명시합니다. 그래서 jQuery를 솔루션 프레임 워크 내에서 더 나은 것
아메드 마수드

39
@AhmedMasud이 경우에는 그렇습니다. 미래의 독자라면 일반 JS가 더 나은 솔루션 일 수 있습니다. 그것이 Stackoverflow의 목적이므로, 여전히 내 의견이 유효한 의견이라고 생각합니다.
Menno

3
행동과 마크 업의 분리가 확실히 바람직하다. 뭐든지, href가 tr의 유효한 속성이 아니라고 말할 것입니다. data-href로 바꾸고 $ (this) .attr을 $ (this) .data로 바꾸십시오.
davidfurber

1
또는 ".clickableRow"클래스 이벤트 바인딩 접근 방식 <a>이 클릭 한 행 의 첫 번째를 찾도록 할 수 있습니다. (그것도 정상적으로 저하 될 것입니다)
Jason Sperske

3
ES6 구문을 사용하는 경우 다음과 같이 링크 클릭을 실행할 수 있습니다.onClick={() => window.open('https://stackoverflow.com/', '_blank')}
Louie Bertoncin

186

every 안에 앵커를 포함시킬 수 있습니다 <td>.

<tr>
  <td><a href="#">Blah Blah</a></td>
  <td><a href="#">1234567</a></td>
  <td><a href="#">more text</a></td>
</tr>

그런 다음 display:block;앵커를 사용하여 전체 행을 클릭 가능하게 만들 수 있습니다.

tr:hover { 
   background: red; 
}
td a { 
   display: block; 
   border: 1px solid black;
   padding: 16px; 
}

jsFiddle 예제입니다.

JavaScript에 의존하지 않는 한 이것은 아마도 당신이 얻는 것만 큼 최적입니다.


11
이것은 최선의 해결책입니다. 많은 감사합니다.
TiyebM

4
@daniel 좋은 대답이지만 셀이 아래로 확장되면 다음과 같이 제대로 작동하지 않습니다. jsfiddle.net/RFFy9/253
midstack

4
큰! 이 솔루션을 사용하면 사용자가 원하는 경우 새 탭에서 링크를 열 수 있습니다. 그러나 빈 열에는 링크가 없습니다.
Ignacio Pérez

9
@AnnaRouben 나는 동의하지 않을 것입니다. 여러 개의 유사한 링크를 갖는 것은 단점과 비교할 때 매우 작은 단점입니다 (JS가없는 작품, 스크린 리더는 링크가 연결된 곳을 읽을 수 있으며 Ctrl 키를 클릭하여 새 탭에서 열 수 있음). ..) Pure-HTML 솔루션은 JS 솔루션보다 보조 소프트웨어에서 거의 항상 더 잘 작동합니다.
JJJ

6
접근성이 뛰어 나기 때문에이 솔루션을 좋아합니다. 사용자는 링크를 탭하고 새 탭에서 링크를 열 수 있습니다. 내 응용 프로그램에서 수행 한 작업 tabindex="-1"은 첫 번째 <td>링크 를 제외한 모든 링크에 배치되므로 사용자 탭은 셀 대 셀이 아닌 행 대 행입니다. 또한 :focus-withinCSS 의사 클래스를 사용하려는 경우 여전히 전체 행을 강조 표시 / 개요 할 수 있습니다 .
Jonathan

90

연결된 테이블 행이 가능하지만 표준 <table>요소로 는 불가능 합니다. display: table스타일 속성을 사용하여 수행 할 수 있습니다 . 여기여기 에 설명 할 바이올린이 있습니다.

이 코드는 트릭을 수행해야합니다.

.table {
  display: table;
}

.row {
  display: table-row;
}

.cell {
  display: table-cell;
  padding: 10px;
}

.row:hover {
  background-color: #cccccc;
}

.cell:hover {
  background-color: #e5e5e5;
}
<link href="https://stackpath.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet" type="text/css" />

<div role="grid" class="table">
  <div role="row" class="row">
    <div role="gridcell" class="cell">
      1.1
    </div>
    <div role="gridcell" class="cell">
      1.2
    </div>
    <div role="gridcell" class="cell">
      1.3
    </div>
  </div>

  <a role="row" class="row" href="#">
    <div role="gridcell" class="cell">
      2.1
    </div>
    <div role="gridcell" class="cell">
      2.2
    </div>
    <div role="gridcell" class="cell">
      2.3
    </div>
  </a>
</div>

표준 <table>요소가 사용되지 않으므로 적절한 액세스 가능성을 보장하기 위해 ARIA 역할이 필요합니다 . role="columnheader"해당되는 경우 와 같이 추가 역할을 추가해야 할 수도 있습니다 . 자세한 내용은 여기를 참조하십시오.


13
이제 dataTables 플러그인을 이것에 적용하십시오! :)
Afonso Gomes

7
IMHO는 정답입니다. IMHO는 링크 (예 : /Firefox의 키), 탐색 ( tab키), 링크 위치 복사, 새 탭 / 창에서 열기 등 링크와 관련된 모든 사용자 에이전트 도구 를 액세스 가능 / 특별한 경우에도 유지하기 때문입니다. 브라우저가 필요합니다. 내 유일한 nitpick은 <div>안에 내부를 중첩하지 않으므로 <a>셀이로 표시되는 것이 좋습니다 <span>.
토비아

이러한 CSS 테이블에 타사 플러그인 및 라이브러리를 적용하는 데 약간의 작업이 필요할 수 있지만 일반적으로 복사하여 붙여 넣기 및 바꾸기입니다. 예를 들어, 나는 Bootstrap 자신 _tables.scss과 다른 임의의 조각을 복제 하여 모든 테이블 요소를 내가 사용하기로 선택한 CSS 클래스로 대체했습니다 (요소와 동일 함 : th.th 정말 혜택에 비해별로 일) .
Tobia

2
좋은 대답이지만 테이블이 적절한 정렬을 위해 방금 사용 된 경우에만 해결책입니다 (많은 상황에서 해당됩니다!). 테이블 형식 데이터의 경우 의미 <table>가 있습니다. 그러나 이것은 여전히 ​​모든 자바 스크립트 솔루션을 능가합니다 :)
Marten Koetsier

이것은 매우 영리한 해결 방법이지만, 그뿐입니다. 이것은 실제로 테이블이 아니므로 저자가 언급했듯이 접근성에 문제가 있습니다. 테이블을 기대하지만 테이블을 얻는 다른 것들에 문제가 발생할 가능성이 큽니다.
타이슨 기비

25

다음과 같이 표준 부트 스트랩 4.3 이상을 사용하여 달성했습니다-jQuery 또는 추가 CSS 클래스가 필요하지 않습니다!

핵심은 stretched-link셀 내의 텍스트 에 사용 <tr>하고 포함 블록으로 정의하는 것입니다.

<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"/>

<table class="table table-hover">
  <tbody>
    <tr style="transform: rotate(0);">
    <th scope="row"><a href="#" class="stretched-link">1</a></th>
      <td>Mark</td>
      <td>Otto</td>
      <td>@mdo</td>
    </tr>
    <tr>
      <th scope="row">2</th>
      <td>Jacob</td>
      <td>Thornton</td>
      <td>@fat</td>
    </tr>
    <tr>
      <th scope="row">3</th>
      <td>Larry</td>
      <td>the Bird</td>
      <td>@twitter</td>
    </tr>
  </tbody>
</table>

transform값을 포함하지 않는 값으로 설정 하는 것과 같이 다른 방법으로 포함 블록을 정의 할 수 있습니다 (위의 예와 같이).

자세한 내용은 Bootstrap 설명서 를 참조하십시오 stretched-link.


1
이 답변에는 더 많은 투표가 필요합니다. 자바 스크립트가 전혀 없습니다. 그게 뭐야 scope="row"? 범위를 사용하지 않고 행은 여전히 ​​링크로 작동합니다.
Christhofer Natalius

트윗 담아 가기 내 원래 답변에 포함되어 있지 않습니다 scope="row". 다른 내용을 편집하려면 기록을 확인하십시오. 코드 스 니펫이 작동하는 것처럼 보이지만 (원본처럼) 편집을 되 돌리지 않았으며 새 코드를 철저하게 테스트 할 기회를 얻지 못했습니다 :-)
Krishna Gupta

이것의 단점은 링크가 열 위에 있고 텍스트를 복사 할 수 없으며 마우스로 마우스를 가져 가면 td의 속성 제목이 표시되지 않기 때문입니다. 불행히도, 나는 옛날 방식으로 돌아가서 한 열에 만 링크를 넣어야합니다.
Christhofer Natalius

2
나는이 솔루션을 좋아했지만 슬프게도 브라우저 간이 아닙니다 (Chrome / Firefox는 괜찮지 만 Safari는 아닙니다). 문제는 tr브라우저간에 포함 블록에 대한 규칙으로 인식되지 않는 태그 때문입니다 ... stackoverflow.com/questions/61342248/…
pom421

17

훨씬 유연한 솔루션은 data-href 속성을 사용하여 무엇이든 타겟팅하는 것입니다. 이것은 다른 장소에서 쉽게 코드를 재사용 할 수 있다는 것입니다.

<tbody>
    <tr data-href="https://google.com">
        <td>Col 1</td>
        <td>Col 2</td>
    </tr>
</tbody>

그런 다음 jQuery에서 해당 속성을 가진 모든 요소를 ​​타겟팅하십시오.

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

그리고 CSS 스타일을 잊지 마십시오 :

[data-href] {
    cursor: pointer;
}

이제 모든 요소에 data-href 속성을 추가하면 작동합니다. 이와 같은 스 니펫을 작성할 때 유연성이 좋았습니다. 바닐라 js 솔루션이 있으면 자유롭게 추가하십시오.


CSS와 좋은 일
Amirhossein Tarmast

내가 가장 좋아하는 솔루션. 잘 👍🏽 일
MFrazier

7

이 부트 스트랩 구성 요소를 사용할 수 있습니다.

http://jasny.github.io/bootstrap/javascript/#rowlink

재 스니 부트 스트랩

선호하는 프론트 엔드 프레임 워크를위한 누락 된 구성 요소.

<table class="table table-striped table-bordered table-hover">
  <thead>
    <tr><th>Name</th><th>Description</th><th>Actions</th></tr>
  </thead>
  <tbody data-link="row" class="rowlink">
    <tr><td><a href="#inputmask">Input mask</a></td><td>Input masks can be used to force the user to enter data conform a specific format.</td><td class="rowlink-skip"><a href="#">Action</a></td></tr>
    <tr><td><a href="http://www.jasny.net/" target="_blank">jasny.net</a></td><td>Shared knowledge of Arnold Daniels aka Jasny.</td><td class="rowlink-skip"><a href="#">Action</a></td></tr>
    <tr><td><a href="#rowlinkModal" data-toggle="modal">Launch modal</a></td><td>Toggle a modal via JavaScript by clicking this row.</td><td class="rowlink-skip"><a href="#">Action</a></td></tr>
  </tbody>
</table>

용법

데이터 속성을 통해

또는 요소에 클래스 .rowlink및 속성 data-link="row"을 추가하십시오 . 다른 옵션 의 경우 셀에 클래스를 추가하여 셀을 제외 할 수있는 것처럼 데이터에 이름을 추가하십시오 .<table><tbody>data-target="a.mainlink".rowlink-skip<td> .

JavaScript를 통해

자바 스크립트를 통해 입력 마스크를 호출합니다.

$('tbody.rowlink').rowlink()

6

<a>내부적 으로 태그 를 사용하여 기술적으로 태그 를 작성하는 좋은 방법 <tr>이 있습니다. 이는 의미 상 올바르지 않을 수도 있지만 (브라우저 경고를 표시 할 수도 있음) JavaScript/jQuery필요 하지 않은 작업으로 작동 합니다.

<!-- HTML -->
<tbody>
  <tr class="bs-table-row">
     <td>Blah Blah</td>
     <td>1234567</td>
     <td>£158,000</td>
     <a class="bs-row-link" href="/your-link-here"></a>
  </tr>
</tbody>

/* CSS */
.bs-table-row {
  position: 'relative';
}

.bs-row-link {
  position: 'absolute';
  left: 0;
  height: '36px'; // or different row height based on your requirements
  width: '100%';
  cursor: 'pointer';
}

추신 : 여기의 요령은 <a>마지막 요소로 태그 를 넣는 것입니다. 그렇지 않으면 첫 번째 공간을 차지하려고 시도합니다.<td> 셀 .

PPS : 이제 전체 행을 클릭 할 수 있으며이 링크를 사용하여 새 탭에서도 열 수 있습니다 (Ctrl / CMD + 클릭)


이것은 기본적으로 내 대답 과 같지 않습니까?
David Balažic

이 답변은 완벽하게 보이지만 실제로는 작동하지 않습니다 . 요소 <tr>에는 <a>요소를 자식으로 가질 수 없기 때문 입니다. 만 <td>하고 <th>유효 자녀입니다. 다음을 참조하십시오 : stackoverflow.com/questions/12634715/…
funkybunky

5

tr에서 onclick javascript 메소드를 사용하여 클릭 가능하게 만들 수 있습니다. 또한 세부 사항으로 인해 링크를 작성 해야하는 경우 javascript에서 함수를 선언하고 onclick에서 호출하여 일부 값을 전달할 수 있습니다.


5

다음은 테이블 행 위에 투명한 A 요소를 배치하는 방법입니다. 장점은 다음과 같습니다.

  • 마우스 포인터로 포인터를 변경하면 상태 표시 줄에 대상 링크가 표시되고 키보드를 탐색하거나 새 탭이나 창에서 열 수 있으며 URL을 복사 할 수 있습니다
  • 표는 링크를 추가하지 않은 것과 동일하게 보입니다.
  • 테이블 코드 자체에는 변화가 없습니다

단점 :

  • A 요소의 크기는 작성시 및 행의 크기를 변경 한 후에 스크립트에서 설정해야합니다 (그렇지 않으면 JavaScript없이 수행 할 수 있음). HTML 또는 CSS로)

테이블은 그대로 유지됩니다.

<table id="tab1">
<tbody>
        <tr>
            <td>Blah Blah</td>
            <td>1234567</td>
            <td>£158,000</td>
        </tr>
</tbody>
</table>

첫 번째 열에 A 요소를 삽입하고 필요한 속성을 설정하여 jQuery JavaScript를 통해 각 행에 대한 링크를 추가하십시오.

// v1, fixed for IE and Chrome
// v0, worked on Firefox only
// width needed for adjusting the width of the A element
var mywidth=$('#tab1').width();

$('#tab1 tbody>tr>td:nth-child(1)').each(function(index){
    $(this).css('position',  'relative');// debug: .css('background-color', '#f11');
    // insert the <A> element
    var myA=$('<A>');
    $(this).append(myA);
    var myheight=$(this).height();

    myA.css({//"border":'1px solid #2dd', border for debug only
            'display': 'block',
            'left': '0',
            'top': '0',
            'position':  'absolute'
        })
        .attr('href','the link here')
        .width(mywidth)
        .height(myheight)
        ;
    });

패딩과 여백을 많이 사용하는 경우 너비와 높이 설정이 까다로울 수 있지만 일반적으로 몇 픽셀을 제거해도 문제가되지 않습니다.

라이브 데모 : http://jsfiddle.net/qo0dx0oo/ (Firefox에서는 작동하지만 IE 또는 Chrome에서는 작동하지 않으며 링크 위치가 잘못되었습니다)

Chrome 및 IE 용으로 수정되었습니다 (여전히 FF에서도 작동 함) : http://jsfiddle.net/qo0dx0oo/2/


2
영리한 솔루션. 행을 가리키면 한 번만 요소를 느리게 만드는 것이 큰 테이블의 성능을 크게 향상시킵니다.
levi

1
@levi 이것을 lazyload하는 방법에 대한 피드백을 줄 수 있습니까?
Subliminal Hash

@KemalEmin 나는 그가 자바 스크립트를 사용한다고 가정합니다onmouseover
brad

5

버튼 행을 테이블 행에 추가하면 부트 스트랩이 CSS 변경없이 커서를 변경합니다. 코드를 거의 사용하지 않고 행을 쉽게 클릭 할 수 있도록하는 방법으로이 역할을 사용하기로 결정했습니다.

HTML

<table class="table table-striped table-hover">
     <tbody>
          <tr role="button" data-href="#">
               <td>Cell 1</td>
               <td>Cell 2</td>
               <td>Cell 3</td>
          </tr>
     </tbody>
</table>

jQuery

$(function(){
     $(".table").on("click", "tr[role=\"button\"]", function (e) {
          window.location = $(this).data("href");
     });
});

동일한 원리를 적용하여 모든 버튼에 버튼 역할을 추가 할 수 있습니다.


와우 실제로 jquery 코드없이 data-href 대신 ui-sref로 작업했습니다. 커서를 손가락으로 바꾸면됩니다.
nurp

이 감사를 완벽하게 톤 일
인 Ashish 얀 배너 지

4

이 코드는 전체 테이블을 클릭 가능하게 만듭니다. 이 예제에서 링크를 클릭하면 링크를 따르지 않고 경고 대화 상자에 링크가 표시됩니다.

HTML :

위 예제 뒤에있는 HTML은 다음과 같습니다.

    <table id="example">
    <tr>
     <th>&nbsp;</th>
     <th>Name</th>
     <th>Description</th>
     <th>Price</th>
   </tr>
   <tr>
     <td><a href="apples">Edit</a></td>
     <td>Apples</td>
     <td>Blah blah blah blah</td>
     <td>10.23</td>
   </tr>
    <tr>
     <td><a href="bananas">Edit</a></td>
     <td>Bananas</td>
     <td>Blah blah blah blah</td>
     <td>11.45</td>
   </tr>
   <tr>
     <td><a href="oranges">Edit</a></td>
     <td>Oranges</td>
     <td>Blah blah blah blah</td>
     <td>12.56</td>
   </tr>
    </table>

CSS

그리고 CSS :

    table#example {
    border-collapse: collapse;   
}
#example tr {
    background-color: #eee;
    border-top: 1px solid #fff;
}
#example tr:hover {
    background-color: #ccc;
}
#example th {
    background-color: #fff;
}
#example th, #example td {
    padding: 3px 5px;
}
#example td:hover {
    cursor: pointer;
}

jQuery

그리고 마지막으로 마술을 일으키는 jQuery :

    $(document).ready(function() {

    $('#example tr').click(function() {
        var href = $(this).find("a").attr("href");
        if(href) {
            window.location = href;
        }
    });

});

행을 클릭하면 앵커에 속한 href에 대한 검색이 수행됩니다. 하나를 찾으면 창의 위치가 해당 href로 설정됩니다.


4

뷰와 컨트롤러가 분리되어 URL을 하드 코딩 할 필요가 없으며 클릭으로 달성 해야하는 모든 것을 클릭 할 때 매우 쉬운 옵션은 클릭 한 번으로 사용하는 것입니다. . Angular ng-click 과도 작동합니다.

<table>
  <tr onclick="myFunction(this)">
    <td>Click to show rowIndex</td>
  </tr>
</table>

<script>
function myFunction(x) {
    alert("Row index is: " + x.rowIndex);
}
</script>

여기서 일 하기


1
확실히 이것이 정답입니다. 다른 사람들은 그러한 단순한 일에 미치도록 복잡합니다. 마우스 포인터를 변경하려면 tr : hover {cursor : pointer; } CSS 클래스에
Tom Close

1
@TomClose 행 클릭으로 수행하려는 작업에 따라 탐색이 정상적으로 작동하지 않는 등 문제가 발생할 수 있습니다. 새 탭 / 창에서 열기를위한 Shift 클릭이없고 대상을 볼 수있는 호버링이 없습니다.
NetMage

4

여기 간단한 해결책이 있습니다 ..

<tr style='cursor: pointer; cursor: hand;' onclick="window.location='google.com';"></tr>

3

, CSS 위치 및 일부 jQuery 또는 JS를 사용하는<a> 또 다른 옵션 :

HTML :

<table>
<tr>
    <td>
        <span>1</span>
        <a href="#" class="rowLink"></a>
    </td>
    <td><span>2</span></td>
</tr>
</table>

CSS :

table tr td:first-child {
    position: relative;
}
a.rowLink {
    position: absolute;
    top: 0; left: 0;
    height: 30px;
}
a.rowLink:hover {
    background-color: #0679a6;
    opacity: 0.1;
}

그런 다음 jQuery와 같이 너비를 지정해야합니다.

    $(function () {
        var $table = $('table');
            $links = $table.find('a.rowLink');

        $(window).resize(function () {
            $links.width($table.width());
        });

        $(window).trigger('resize');
    });

3

나는 누군가가 이미 거의 똑같이 썼다는 것을 알고 있지만, 내 방법은 올바른 방법이며 (div는 A의 자식이 될 수 없음) 클래스를 사용하는 것이 좋습니다.

CSS를 사용하여 테이블을 모방하고 A 요소를 행으로 만들 수 있습니다

<div class="table" style="width:100%;">
  <a href="#" class="tr">
    <span class="td">
      cell 1
    </span>
    <span class="td">
      cell 2
    </span>
  </a>
</div>

CSS :

.table{display:table;}
.tr{display:table-row;}
.td{display:table-cell;}
.tr:hover{background-color:#ccc;}

3

나는 onclick=""초보자를 위해 사용하고 이해하기 쉽기 때문에 속성 을 사용하는 것을 선호합니다.

 <tr onclick="window.location='any-page.php'">
    <td>UserName</td>
    <td>Email</td>
    <td>Address</td>
</tr>

2

허용되는 답변은 훌륭하지만 모든 tr에서 URL을 반복하지 않으려는 경우 작은 대안을 제안합니다. 따라서 URL이 아닌 href를 테이블 data-url에 넣습니다.

<table data-click data-url="href://blah">    
    <tbody>
        <tr id ="2">
            <td>Blah Blah</td> <td>1234567</td> <td>£158,000</td>
        </tr>
        <tr id ="3">
            <td>Blah Blah</td> <td>1234567</td> <td>£158,000</td>
        </tr>
    </tbody>
    </table

jQuery(document).ready(function($) {
    $('[data-click] tbody tr').click(function() {
        var url = $(this).closest('table').data("url");
        var id = $(this).closest('tr').attr('id');
        window.location = url+"?id="+id);
    });
});

또한 모든 tr에 클릭 데이터 속성을 추가 할 필요가 없기 때문에 좋습니다. 또 다른 좋은 점은 클래스가 실제로 스타일링에만 사용해야하므로 클래스를 사용하여 클릭을 유발하지 않는다는 것입니다.


2

앞에서 언급하지 않은 한 가지 해결책은 셀에서 단일 링크를 사용하고 일부 CSS를 사용하여이 링크를 셀 위로 확장하는 것입니다.

table {
  border: 1px solid;
  width: 400px;
  overflow: hidden;
}

tr:hover {
  background: gray;
}

tr td {
  border: 1px solid;
}

tr td:first-child {
  position:relative;
}

a:before {
  content: '';
  position:absolute;
  left: 0;
  top: 0;
  bottom: 0;
  display: block;
  width: 400px;
}
<table>
  <tr>
    <td><a href="https://google.com">First column</a></td>
    <td>Second column</td>
    <td>Third column</td>
  </tr>
  <tr>
    <td><a href="https://stackoverflow.com">First column</a></td>
    <td>Second column</td>
    <td>Third column</td>
  </tr>
</table>


다소 우아해 보입니다. 그러나 Google 링크 데모는 작동하지 않습니다. 하나의 스택 오버 플로우. 아마도 Google은 종종있는 것처럼 말입니다. 아마 Bing에 링크 :-) 그들을 바로 제공합니다. 어쨌든 대단하고 깔끔한 솔루션.
BeNice

이것은 나를 작동시킨다!! 좋은 해결책. 주목할 것은 a : before의 너비는 테이블을 덮을 수있을만큼 길어야한다는 것입니다.
Arst

1
<tbody>
    <tr data-href='www.bbc.co.uk'>
        <td>Blah Blah</td>
        <td>1234567</td>
        <td>£158,000</td>
    </tr>
    <tr data-href='www.google.com'>
        <td>Blah Blah</td>
        <td>1234567</td>
        <td>£158,000</td>
    </tr>
</tbody>

<script>
    jQuery(document).ready(function ($) {
        $('[data-href]').click(function () {
            window.location = $(this).data("href");
        });
    });
</script>

여기에있는 주요 솔루션은 훌륭하지만 내 솔루션은 수업이 필요하지 않습니다. URL과 함께 data-href 속성을 추가하기 만하면됩니다.


1

이 문제를 해결하기 위해 많은 시간을 투자했습니다.

세 가지 접근 방식이 있습니다.

  1. JavaScript를 사용하십시오. 확실한 단점 : 기본적으로 새 탭을 열 수 없으며 행 위에 마우스를 올리면 일반 링크와 같이 상태 표시 줄에 표시가 없습니다. 접근성도 문제입니다.

  2. HTML / CSS 만 사용하십시오. 이것은 <a>각각 아래 에 중첩을 두는 것을 의미 합니다 <td>. 이 바이올린 과 같은 간단한 접근 방식은 작동하지 않습니다. 클릭 가능한 표면 이 각 열에 대해 반드시 같을 필요는 없기 때문입니다. 이것은 심각한 UX 문제입니다. 또한 <button>행에 필요한 경우 아래에 중첩하는 것이 유효한 HTML이 아닙니다.<a> 태그 (브라우저에는 문제가 없지만).

    이 접근법을 구현하는 3 가지 다른 방법을 찾았습니다. 먼저 괜찮습니다, 다른 두 사람은 위대하지 않습니다.

    a) 이 예제를 살펴보십시오 .

    tr {
      height: 0;
    }
    
    td {
      height: 0;
      padding: 0;
    }
    
    /* A hack to overcome differences between Chrome and Firefox */
    @-moz-document url-prefix() {
      td {
        height: 100%;
      }
    }
    
    a {
      display: block;
      height: 100%;
    }

    작동하지만 Chrome과 Firefox의 불일치로 인해 차이점을 극복하려면 브라우저 별 해킹이 필요합니다. 또한 Chrome은 항상 셀 내용을 맨 위에 정렬하므로 특히 줄 높이가 다양한 경우 긴 텍스트에 문제가 발생할 수 있습니다.

    b) 설정 <td>{ display: contents; } . 다른 두 가지 문제가 발생합니다.

    b1. 다른 사람이 <td>태그 설정과 같이 직접 스타일을 지정하려는 경우 { width: 20px; }해당 스타일을<a> 지정 태그 . Javascript 대안보다 더 많은 마법을 사용해야 할 수도 있습니다.

    b2. { display: contents; }아직 실험 중입니다. 특히 Edge에서는 지원되지 않습니다.

    C) 설정 <td>{ height: --some-fixed-value; }. 이것은 충분히 유연하지 않습니다.

  3. 내가 진지하게 생각하는 마지막 방법 은 클릭 가능한 행을 전혀 사용하지 않는 것 입니다. 클릭 가능한 행은 훌륭한 UX 환경이 아닙니다. 시각적으로 클릭 가능한 것으로 표시하기가 쉽지 않으며 버튼과 같이 행 내에서 여러 부분을 클릭 할 수있는 경우 문제가 발생합니다. 따라서 가능한 대안은 <a>첫 번째 열에 만 태그를 지정하여 일반 링크로 표시하고 전체 행을 탐색하는 역할을하는 것입니다.


0

다른 방법이 있습니다 ...

HTML :

<table>
<tbody>
       <tr class='clickableRow'>
       <td>Blah Blah</td>
       <td>1234567</td>
       <td>£158,000</td>
        </tr>
</tbody>
</table>

jQuery :

$(function() {
      $(".clickableRow").on("click", function() {
          location.href="http://google.com";

      });

});

새 탭에서 어떻게 열 수 있습니까? @ klewis
Khushbu Vaghela

0
<table>
  <tr tabindex="0" onmousedown="window.location='#';">
    <td>1</td>
    <td>2</td>
    <td>3</td>
  </tr>
</table>

#을 url로 tabindex="0"바꾸고 모든 요소를 ​​포커스 가능하게 만듭니다.


-1

행에 ID를 줄 수 있습니다. 예 :

<tr id="special"> ... </tr>

그런 다음 jquery를 사용하여 다음과 같이 말합니다.

$('#special').onclick(function(){ window="http://urltolinkto.com/x/y/z";})


1
여러 행을 가질 가능성이 높고 하나의 항목에만 id를 사용해야하기 때문에 id 대신 class를 사용하고 싶습니다.
Programmingjoe

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.