2017-02-21 81 views
0

我想找到一个div的innerHTML在一个数组中。我正在做一个15滑块游戏(它将一个4x4格子打乱并且你需要安排它回来)。我能够成功获取1-15的图块编号(innerHTML),但是当我尝试找到它在全局数组中的位置(非重复值0-15,0代表空白值)时,它只返回-1。你能看到我这样做有什么问题吗?我使用indexOf有什么问题?

var grid = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 ,15 ,0]; 

function move() { 
    var tileNum = this.innerHTML; 
    var ind = grid.indexOf(tileNum); 
    var blankInd = grid.indexOf(0); 
    console.log(tileNum); 
    console.log(ind); 
    console.log(blankInd); 
} 
+0

你传递的字符串。将其转换为数字。 – Shubham

回答

2

.innerHTML属性返回一个字符串。你需要将其转换为数字或将不匹配的数字数组元素("1" !== 1):

// using unary plus operator: 
var tileNum = +this.innerHTML; 
// OR: 
var tileNum = Number(this.innerHTML); 
1

内部HTML总是返回一个字符串值作为结果。在查找索引之前,您必须将其解析为int。

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <script> 
 
     var grid = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 ,15 ,0]; 
 

 
\t \t function move() { 
 
\t \t \t var tileNum = "5"; 
 
\t \t \t var ind = grid.indexOf(parseInt(tileNum)); 
 
\t \t \t var blankInd = grid.indexOf(0); 
 
\t \t \t console.log(tileNum); 
 
\t \t \t console.log(ind); 
 
\t \t \t console.log(blankInd); 
 
\t \t } 
 
     
 
     move(); 
 
    </script> 
 
</head> 
 
</html>

0

只是解析字符串到数字,因此将工作

var grid = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 ,15 ,0]; 
 

 
function move() { 
 
\t var tileNum = parseInt(this.innerHTML); 
 
\t var ind = grid.indexOf(tileNum); 
 
\t var blankInd = grid.indexOf(0); 
 
\t console.log(tileNum); 
 
\t console.log(ind); 
 
\t console.log(blankInd); 
 
} 
 
move();