如何获取动态表的属性

时间:2016-05-23 09:41:37

标签: javascript html dynamic onclick

我的项目遇到了一些麻烦,

我需要建立一个游戏:Mine Sweeper,

我在这个项目中的主要问题是我的html页面中有动态表 我在我的Javascript页面中构建了该矩阵,

我想通过onclick事件获取当前单元格,我只得到第一个单元格(0,0):

这是我的家庭工作项目,我只需要帮助即可了解如何获取我点击的每个单元格的索引,

我的html页面:

<body onload="initGame()">
    <header>
      <h1>My Mine Sweeper</h1>
    </header>

    <table class="mineTable" onclick="cellClicked(this)" border="1">
          <tbody class="mineSweeperTable" ></tbody>
    </table>

我的javascript页面:

    'use strict';

var gMINE = '&#10057;';
var gCELL = ' ';
var gLevel = {
      SIZE : 4 ,
      MINES: 0.2
};
var gCell ={
    i : 0 ,
    j : 1
}

var gMineSweeper = [];

function getRandomCell() {

    return (Math.random() > gLevel.MINES)? gCELL : gMINE ;  
}

function initGame() {

  buildBoard();
  renderBoard(gMineSweeper);
  countMines(gMineSweeper);
  //setMinesNeighborsCount(gMineSweeper);
}

function buildBoard() {
  var elCell = document.querySelectorAll ('td');
  for (var i = 0; i < gLevel.SIZE; i++) {
    gMineSweeper.push([]);
    for (var j = 0; j < gLevel.SIZE; j++) {
      gMineSweeper[i][j] = getRandomCell();
    }
  }
}

function renderBoard(board) {

  var elMineSweeperTable = document.querySelector('.mineSweeperTable');

  var strHTML = '';
  board.forEach(function (row) {
    strHTML += '<tr>';
    row.forEach(function (cell) {

      strHTML += '<td> ' + cell +  ' </td>'
    });    
    strHTML += '</tr>'
  })
  elMineSweeperTable.innerHTML = strHTML;
}

function countMines(board) {
  var count = 0;
  board.forEach(function(row) {
    row.forEach(function(cell) {
      if(cell === gMINE){
        count++;
      }   
    });
  });
  console.log('Mines Count : ' , count);
  return count;
}

function cellClicked(elCell,i,j) {
  var elCell = document.querySelectorAll ('td');
  console.log('You Clicked on me ! : ' , elCell,i,j);
  debugger;

}
function setMinesNeighborsCount(board) {
  var elCell = document.querySelector('td');
  // debugger;
  // for (var i = 0; i < board; i++) {
  //   gMineSweeper.push([]);
  //   for (var j = 0; j < board; j++) {
  //     var ngbrsCount = countNgbrs(i, j);
  //     console.log('Cell ', i, ', ', j, ' has: ', ngbrsCount  );
  //     if (ngbrsCount > 0) {
  //       debugger;
  //       board.push(ngbrsCount);
  //       // elCell.innerHTML = ngbrsCount;
  //       cell[i][j] = ngbrsCount;
  //       elCell = cell[i][j];

  //     }
  //     // debugger;
  //     if (cell === gMINE) {
  //       console.log('This cell is Mine', i, j);
  //       // debugger;
  //       // board.push(ngbrsCount);
  //     }    
  //   }
  // }
  var c = elCell;
  debugger;
  board.forEach(function (row, i) {
    row.forEach(function (cell, j) {

      var ngbrsCount = countNgbrs(i, j);
      console.log('Cell ', i, ', ', j, ' has: ', ngbrsCount  );
      if (ngbrsCount > 0) {
        //board.push(ngbrsCount);
        // elCell.innerHTML = ngbrsCount;
        //debugger;
        c[i][j] = ngbrsCount;

      }
      debugger;
      if (cell === gMINE) {
        console.log('This cell is Mine', i, j);
        //debugger;
        // board.push(ngbrsCount);
      }    
  });
});
}
function countNgbrs(i, j) {
  var count = 0;

  for (var a = i-1; a <= i+1; a++){

    if ( a < 0 || a >= gMineSweeper.length ) continue;

    for (var b = j-1; b <= j+1; b++){

      if ( b < 0 || b >= gMineSweeper.length ) continue;
      if ( a === i && b === j ) continue;

      if (gMineSweeper[a][b] === gMINE) count++;
    }

  }
  return count;
}

2 个答案:

答案 0 :(得分:0)

使用jQuery

获取from table标记的位置

HTML

<td onclick='Getposition($(this))'></td>

function Getposition(e){  
  var col   = e.index() + 1;
  var row   = e.closest('tr').index() + 1;
  alert( [col,row].join(',') );  
}

示例小提琴 http://jsbin.com/lupifilike/2/edit?html,js,output

答案 1 :(得分:0)

function cellClicked(el) {
  document.querySelector('.mineTable').onclick = function(){
    var el = event.target;
    console.log('td clicked' , el);
    debugger;
    if(el.innerText === gMINE){
      console.log('Game Over!  ');

    }
  };
}

以这种方式工作:)