2017-03-17 12 views
2

我用這個代碼來獲得一個TD的索引的表:的Javascript表TD的指數

var tdIndex = this || (e || event).target; 
    var index = tdIndex.cellIndex; 

的問題是,每行的指數在0再次啓動; 例如,第一行的第一個單元格的索引爲0.類似地,第二行中的第一個單元格的索引也是0,以此類推。我不希望索引被重置爲0表中的每一行。我希望索引號繼續在上一行的最後一個單元格中停留的地方。

+0

請分享完整代碼 –

+0

嘗試獲取與索引一起的行數,以便您可以輕鬆識別單元。 –

回答

0

問你的細胞是否爲父行,然後得到rowIndex

var rowIndex = e.target.parentElement.rowIndex; 

上面的代碼假定e爲您的活動和target是你的。您的(e || event)代碼並不是真的必要,因爲您根據聲明事件處理程序的方式來決定事件對象的命名。

0

您需要考慮rowIndex屬性以獲取每個單元格的唯一編號。

理想的每個單元在JS定義爲唯一對(rowIndex,cellIndex

var tdIndex = this || (e || event).target; 
var index = tdIndex.cellIndex + 1000 * tdIndex.rowIndex; 

記下你可以使用任何數字,而不是1000。它應該只是比列的最大數量表

0

像這樣的事情可以做的伎倆,甚至如果細胞的數量是不是在每一行同樣會工作:

const table = document.querySelector('#table__base'); 
 
const cellOne = document.querySelector('#cellOne'); 
 
const cellTwo = document.querySelector('#cellTwo'); 
 

 
function getIndex(table, cell) { 
 
    let counter = 0; 
 

 
    for (let i = 0, len = cell.parentNode.rowIndex; i <= len; i += 1) { 
 
    let numberOfCellsInThisRow = (i === cell.parentNode.rowIndex) ? cell.cellIndex : table.rows[i].cells.length; 
 
    counter += numberOfCellsInThisRow; 
 
    } 
 
    return counter; 
 
} 
 

 
console.log(getIndex(table, cellOne)); 
 
console.log(getIndex(table, cellTwo));
<table id="table__base"> 
 
    <tr> 
 
    <td>0</td> 
 
    <td>1</td> 
 
    <td>2</td> 
 
    <td>3</td> 
 
    <td>4</td> 
 
    <td>5</td> 
 
    </tr> 
 
    <tr> 
 
    <td>6</td> 
 
    <td>7</td> 
 
    <td>8</td> 
 
    <td id="cellOne">9</td> 
 
    <td>10</td> 
 
    <td>11</td> 
 
    </tr> 
 
    <tr> 
 
    <td>12</td> 
 
    <td>13</td> 
 
    <td id="cellTwo">14</td> 
 
    <td>15</td> 
 
    <td>16</td> 
 
    <td>17</td> 
 
    </tr> 
 
</table>