getElementsByTagName无法在chrome和safari中使用

时间:2010-08-10 11:20:23

标签: google-chrome safari getelementsbytagname

我正在使用javascript方法getElementsByTagName(“a”)来调用所有'a'标记并对它们产生一些影响。该方法适用于FF和Opera,但不适用于Chrome和Safari。 当我查看Chrome和Safari的调试工具时,他们会说: “Uncaught TypeError:无法调用方法'getElementsByTagName'为null”

为什么会这样,修复是什么?请有人可以就此提出建议吗?

非常感谢提前。

以下是代码:

function popUpSAPWindow(){
// Find all links in the page and put them into an array.
var linksInOrderLinesTable = document.getElementById("orderLinesTable").getElementsByTagName("a"); // The line doing the error
var linksLen = linksInOrderLinesTable.length;

// If the link text is 'SAP' then modify the attributes
for(var i = 0; i < linksLen; i++){
    if(linksInOrderLinesTable[i].innerHTML == "SAP"){
        // Store the 'href' value of each SAP link.
        var sapHref = linksInOrderLinesTable[i].href;

        // Modify the attributes of each SAP link.      
        linksInOrderLinesTable[i].setAttribute("href", "javascript:return false;");
        linksInOrderLinesTable[i].setAttribute("onclick", "sapNewWindow(\'" + sapHref + "\')");
    }
}

}

适用于此HTML:

<table id="orderLinesTable" summary="List of orders made by customers that the administrator can pick and deal with">
<tr>
    <th>Status</th>
    <th>Basket id</th>
    <th>Order line id</th>
    <th>Product</th>
    <th>Company</th>
    <th>Catalogue</th>
    <th>Date</th>
    <th>Details</th>
</tr>
<tr>
    <td>Accepted</td>
    <td>236569</td>
    <td>207</td>
    <td>OS Master Map</td>
    <td>NHS</td>
    <td>Standard</td>
    <td>1 Aug 10</td>
    <td><a href="/orderLineDetails.html">Normal</a> <a href="/orderLineDetails.html">SAP</a></td>
</tr>
<tr>
    <td>New</td>
    <td>236987</td>
    <td>528</td>
    <td>Code-Point</td>
    <td>BT</td>
    <td>Standard</td>
    <td>9 Aug 10</td>
    <td><a href="/orderLineDetails.html">Normal</a> <a href="/orderLineDetails.html">SAP</a></td>
</tr>

但是当我在其他页面上时,它会提到错误。

2 个答案:

答案 0 :(得分:3)

问题是,当您在没有document.getElementById("orderLinesTable").getElementsByTagName("a") getElementById的网页上调用orderLinesTable时,将返回null。因此,在getElementsByTagName上调用null会产生错误。

这应该可以解决问题:

var orderLinesTable = document.getElementById("orderLinesTable");
var linksInOrderLinesTable = [];

if (orderLinesTable) { // only get the links when the table exists
    linksInOrderLinesTable = orderLinesTable.getElementsByTagName("a");
}

答案 1 :(得分:1)

Safari和Chrome都支持该方法。您正在使用它的对象可能无法一致地检索,因此它的计算结果为null。检查你是如何抓住你正在调用它的对象。

BTW ..它不是Javascript方法,它是DOM API中的一种方法。

编辑:

document.getElementById("orderLinesTable")

警告这是什么。它是空的吗?