getElementsByTagName не работает в Chrome и Safari - PullRequest
3 голосов
/ 10 августа 2010

Я использую 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 ]

3 голосов
/ 11 августа 2010

Проблема в том, что при вызове document.getElementById("orderLinesTable").getElementsByTagName("a") на странице, которая не имеет orderLinesTable getElementById, вернет 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 голос
/ 10 августа 2010

Safari и Chrome поддерживают этот метод.Объект, на котором вы его используете, не может быть постоянно извлечен, поэтому он оценивается как ноль.Проверьте, как вы захватываете объект, который вызываете.

Кстати ... это не метод Javascript, это метод в DOM API.

РЕДАКТИРОВАТЬ:

document.getElementById("orderLinesTable")

предупредить, что это такое.Это ноль?

...