代码之家  ›  专栏  ›  技术社区  ›  Shaoz

GetElementsByTagname不在Chrome和Safari中工作

  •  3
  • Shaoz  · 技术社区  · 14 年前

    我正在使用javascript方法getElementsByTagname(“A”)调用所有的“A”标记并对它们执行一些效果。该方法适用于FF和Opera,但不适用于Chrome和Safari。 当我查看chrome和safari的调试工具时,他们说: “未捕获的类型错误:无法调用方法”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>
    

    但当我在其他页面上时,它会给出所提到的错误。

    2 回复  |  直到 8 年前
        1
  •  3
  •   Ivo Wetzel    14 年前

    问题是,你打电话的时候 document.getElementById("orderLinesTable").getElementsByTagName("a") 在没有 orderLinesTable GetElementByID将返回 null . 因此呼叫 getElementsByTagName 无效的 会产生错误。

    这样可以解决问题:

    var orderLinesTable = document.getElementById("orderLinesTable");
    var linksInOrderLinesTable = [];
    
    if (orderLinesTable) { // only get the links when the table exists
        linksInOrderLinesTable = orderLinesTable.getElementsByTagName("a");
    }
    
        2
  •  1
  •   meder omuraliev    14 年前

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

    顺便说一句。。它不是一个javascript方法,而是domAPI中的一个方法。

    编辑:

    document.getElementById("orderLinesTable")
    

    注意这是什么。它是空的吗?