xml对象上没有find()方法

时间:2014-03-09 13:52:59

标签: javascript xml

从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);
        }
    }       
}

1 个答案:

答案 0 :(得分:1)

a)JavaScript数组没有.find方法。您可能正在寻找.indexOf。 b).getElementsByTagName返回伪数组,伪数组没有数组方法。

.indexOf返回找到的元素的索引,如果找不到任何内容,则返回-1。它可以像这样“强制”在伪数组上:

Array.prototype.indexOf.call(theArray, 'thing')

您的代码中还有其他错误。您可能会使用jQuery API来混淆DOM元素的API。