この表を検討してください。
http://jsbin.com/esikac/1/edit
各セルに「xy」のような値のペアがあることに注意してください。xは開始列インデックス、yは終了列インデックスです(この場合、列は列自体ではなく列間の行であり、ゼロから始まります)。これが理にかなっていることを願っています。
必要なのは、セル(td要素)を取得し、サンプルテーブルと同じように開始列と終了列のインデックスを取得するJavaScriptです。つまり、要素をパラメーターとして受け取る関数getColumnBounds
があるとします。td
それを呼び出してtd
テーブルの右上にあるを渡すと、「3-5」が表示されます(もちろん、中のテキストを読むのではなく、理解することによって)。
これは私がこれまでに持っているものですが、マージされた行を追加するとすぐに失敗した場合:
function getColumnBounds(td) {
function colSpan(col) {
return parseInt((col && col.nodeType == 1 && element.nodeName.match(/t[dh]/i)) ? (col.getAttribute("colSpan") || 1) : 0);
}
function endIndex(element) {
var colPos = colSpan(element);
while(element) {
element = element.previousSibling;
colPos += colSpan(element);
}
return colPos;
}
var startIndex = endIndex(td.previousSibling);
var endIndex = endIndex(td);
return ("" + startIndex + "-" + endIndex);
}