4

私はjavascriptメソッドgetElementsByTagName( "a")を使用して、すべての'a'タグを呼び出し、それらを使用して何らかの効果を実行しています。この方法はFFとOperaで機能しますが、ChromeとSafariでは機能しません。ChromeとSafariのデバッグツールを見ると、 「キャッチされていないTypeError:nullのメソッド'getElementsByTagName'を呼び出せません」と表示されます。

それはなぜですか、そして修正は何ですか?誰かがこれについて私にアドバイスできますか?

よろしくお願いします。

コードは次のとおりです。

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>

しかし、私が他のページにいるとき、それは言及されたエラーを与えます。

4

2 に答える 2

3

問題は、 getElementByIdがdocument.getElementById("orderLinesTable").getElementsByTagName("a")ないページを呼び出すと、が返されることです。したがって、呼び出すとエラーが発生します。orderLinesTablenullgetElementsByTagNamenull

これで問題が解決するはずです。

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

if (orderLinesTable) { // only get the links when the table exists
    linksInOrderLinesTable = orderLinesTable.getElementsByTagName("a");
}
于 2010-08-11T15:50:43.877 に答える
1

SafariとChromeはどちらもこの方法をサポートしています。使用しているオブジェクトは一貫して取得されない可能性があるため、nullと評価されます。呼び出しているオブジェクトをどのように取得しているかを確認します。

ところで..これはJavascriptメソッドではなく、DOMAPIのメソッドです。

編集:

document.getElementById("orderLinesTable")

これが何であるかを警告します。nullですか?

于 2010-08-10T11:29:22.700 に答える