IE10:getElementsByName()没有返回IE10中具有相同Id的元素

时间:2013-05-01 17:01:24

标签: javascript internet-explorer-10 getelementsbyname

我在jsp中有一个动态填充的表。 我对所有表行使用了相同的id。

在javascript中我想要检索id为“resultRow”的所有表行元素。 和js中的getElementsByName(“resultRow”)在IE10中给出了空的htmlcollection

有没有其他方法可以获得匹配id

的表格

非常感谢任何帮助

`这是我的代码段

In JSP:
<table id="subSecondTable" cellpadding="0" cellspacing="0">
   <c:set var="loopCount" value="0" />
   <c:forEach var="vinList" items="${requestScope.vehicleDetailsPO}">
     <tr id="resultRow" height="10" class="handCursor"
       onclick="rowColorChange('<c:out value="${loopCount}"/>','<c:out value="${vinList.vin}"/>');">

In js:
function rowColorChange(rowNumber,vin){ 
    var rows=document.getElementsByName("resultRow");   
    var columns;
    rowHighlighted=rowNumber;       
    for(i=0;i<rows.length;i++){
        if (i==rowNumber){      
            rows[rowNumber].style.backgroundColor="blue";
            //change the text color for the highlighted row 
            columns = rows[rowNumber].cells
            for(j=0;j<columns.length;j++){
                columns[j].style.color = "white";
            }
            //change the text color for the highlighted row
            var previousRowint = parseInt(previousRow);                 
            if (previousRow != rowNumber)
            {               
                columns = rows[previousRowint].cells
                for(j=0;j<columns.length;j++){
                    columns[j].style.color = "black";
                }
            }               
            previousRow=rowNumber; 
            if(vin==''){             
                vin = rows[parseInt(rowHighlighted)].cells[3].innerText;
            }
            document.getElementById("txtCopyVin").value=vin;
            document.getElementById("txtCopyVin").select();
        }else{      
            rows[i].style.backgroundColor="white";                       
        }
    }
    if(window.event!=null){
        rows[rowNumber].cells(window.event.srcElement.cellIndex).focus();
    }
}`     

3 个答案:

答案 0 :(得分:1)

此行为是设计使然 nameid是两回事。

此外,id必须是唯一的;您的HTML无效。

您应该使用class代替,并致电getElementsByClassName()

答案 1 :(得分:1)

我刚刚通过自己的测试证实,这是微软似乎在IE10中做出的改变,使其与市场上的其他浏览器兼容。在每个其他浏览器中,ID和名称是不同的东西。但是直到IE 10,微软选择以不同的方式做事,这导致了许多不兼容性,如here所述。这个更改修复了我为chrome编写的代码,但似乎已经破坏了为IE编写的代码。

如果您指示用户打开“兼容模式”,它应该像以前一样工作,但这可能不是一个好的长期解决方案。

好消息是,如果您通过ID引用id和名称引用名称来修复此问题,那么您的网站将与IE之外的其他浏览器兼容。

查看你的代码,似乎你想用name =“resultRow”替换id =“resultRow”

答案 2 :(得分:0)

nameid何时相等?举个例子,有多少人有John Smith这个名字(博士除外)?尽管如此,它们都有唯一的ID。这同样适用于您的HTML。

使用<tr name="resultRow"...>,然后您就可以访问getElementsByName('resultRow')