从xml文档中提取我需要的标签后,我有两组我想要迭代的标签。对于其中一个集合,我收到了消息:
Uncaught TypeError: Object #<Element> has no method 'find'
我发现这很奇怪,因为我以同样的方式得到它们,如果我把它们写到控制台,它们就在那里。
var rows = response.getElementsByTagName("row");
for(var i = 0; i < rows.length; ++i)
{
var northWalls = rows[i].getElementsByTagName("north");
var westWalls = rows[i].getElementsByTagName("west");
console.log(westWalls); //this prints as I expect
for(var j = 0; j < northWalls.length; ++j)
{
var x = cellWidth * j;
var y = cellWidth * i;
if(i != 0 && northWalls[j].find("north").text() == false)
{//north
drawWall(ctx, x, y, x + cellWidth, y);
}
if(j != 0 && westWalls[j].find("west").text() == false)
{ //this find method gives the error
drawWall(ctx, x, y, x, y + cellWidth);
}
}
}
为什么其中一个会给我这个错误而不是另一个。
[编辑]在@sabof的建议之后我最终得到了这个:
for(var i = 0; i < rows.length; ++i)
{
var northWalls = rows[i].getElementsByTagName("north");
var westWalls = rows[i].getElementsByTagName("west");
for(var j = 0; j < northWalls.length; ++j)
{
var x = cellWidth * j;
var y = cellWidth * i;
if(i != 0 && northWalls[j].firstChild.nodeValue === "false")
{//north
drawWall(ctx, x, y, x + cellWidth, y);
}
if(j != 0 && westWalls[j].firstChild.nodeValue === "false")
{//west
drawWall(ctx, x, y, x, y + cellWidth);
}
}
}
答案 0 :(得分:1)
a)JavaScript数组没有.find
方法。您可能正在寻找.indexOf
。 b).getElementsByTagName
返回伪数组,伪数组没有数组方法。
.indexOf
返回找到的元素的索引,如果找不到任何内容,则返回-1
。它可以像这样“强制”在伪数组上:
Array.prototype.indexOf.call(theArray, 'thing')
您的代码中还有其他错误。您可能会使用jQuery API来混淆DOM元素的API。