2012-05-08 21 views
9

jQueryを使用しないで、テーブル内でもonClickのRowとCol(X、Y)を取得する最も効率的な方法は何ですか?テーブル内のセルの行番号と列番号を見つける方法

クリックリスナーをテーブルに割り当てて、それをトップにバブルさせるとうまくいくと思いますが、実際にはHTMLTableElementが表示されます。私が得たいのは、この1人のリスナーからのCol番号と行番号です。それは可能ですか?

​​
+0

の可能性の重複:(http://stackoverflow.com/questions/4998953/javascript-get-cell-location)[Javascriptのセル位置を取得する] - 前に検索をご利用くださいあなたは新しい質問をします。 –

+0

@Felix、私は検索しましたが、私が使用した文字列のどれもその質問を思いつきませんでした。これは、より一般的な用語を使用しているので、後で検索を使用する人々のためにかなり良く機能するはずです。 –

+0

Jonathan Sampsonが投稿した内容に基づいて、私はこれを使用しました。 http://jsbin.com/iqavad/edit#javascript,html –

答えて

17

あなたは、テーブルに結合することができ、それはあなたが(行またはセルのインデックスを持っていない)細胞との間の間隔内をクリックかもしれない可能性を開いたままになっていました。私は以下の例では、セル自体にバインドし、常に行とセルのインデックスを持つことを保証することに決めました。

var tbl = document.getElementsByTagName("table")[0]; 
var cls = tbl.getElementsByTagName("td"); 

function alertRowCell(e){ 
    var cell = e.target || window.event.srcElement; 
    alert(cell.cellIndex + ' : ' + cell.parentNode.rowIndex); 
} 

for (var i = 0; i < cls.length; i++) { 
    if (cls[i].addEventListener) { 
    cls[i].addEventListener("click", alertRowCell, false); 
    } else if (cls[i].attachEvent) { 
    cls[i].attachEvent("onclick", alertRowCell); 
    } 
} 

デモ:http://jsbin.com/isedel/2/edit#javascript,html

私はあなたが安全に、あまりにもテーブル自体に結合し、そしてそれは、細胞だったかどうかを確認するためにソース要素に対してチェックを実行することができたとします

var tbl = document.getElementsByTagName("table")[0]; 

function alertRowCell (e) { 
    var cell = e.target || window.event.srcElement; 
    if (cell.cellIndex >= 0) 
    alert(cell.cellIndex + ' : ' + cell.parentNode.rowIndex); 
} 

if (tbl.addEventListener) { 
    tbl.addEventListener("click", alertRowCell, false); 
} else if (tbl.attachEvent) { 
    tbl.attachEvent("onclick", alertRowCell); 
} 

デモ:http://jsbin.com/isedel/5/edit

+0

2番目の例(http://jsbin.com/isedel/4/edit#javascript,html)は最初の列では機能しません。しかし、私の神、あなたの正しい道に! –

+0

@マークトムリンごめんなさい。 「0」の「cellIndex」は偽である。正しいとは思っていませんでした。 – Sampson

+0

http://jsbin.com/isedel/5/editは完璧です!どうもありがとうございます! –

1
window.onload = function() { 
document.getElementsByTagName('table')[0].addEventListener('click', function(e) { 
    alert(e.target); 
}, false); 
} 
5

これを行う最も簡単な方法があります。

window.onload = function() { 
 
    document.querySelector('#myTable').onclick = function(ev) { 
 
    var rowIndex = ev.target.parentElement.rowIndex; 
 
    var cellIndex = ev.target.cellIndex; 
 
    alert('Row = ' + rowIndex + ', Column = ' + cellIndex); 
 
    } 
 
}
<table border="1" id="myTable"> 
 
    <tr> 
 
     <td>first row first column</td> 
 
     <td>first row second column</td> 
 
    </tr> 
 
    <tr> 
 
     <td>second row first column</td> 
 
     <td>second row second column</td> 
 
    </tr> 
 
    <tr> 
 
     <td>third row first column</td> 
 
     <td>third row second column</td> 
 
    </tr> 
 
</table>

関連する問題