0

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

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

有没有其他方法可以获取匹配 id 的 tablerows

任何帮助是极大的赞赏

`这是我的代码片段

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();
    }
}`     
4

3 回答 3

1

我刚刚通过自己的测试确认这是微软似乎在 IE10 中做出的改变,以使其与市场上的所有其他浏览器兼容。在其他所有浏览器中,ID 和名称是不同的东西。但在 IE 10 之前,微软选择了不同的做法,这导致了很多不兼容问题,如此所述。此更改修复了我为 chrome 编写的代码,但似乎损坏了为 IE 编写的代码。

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

好消息是,如果您通过使 id 引用 id 和 names 引用名称来解决代码中的这个问题,那么您的站点将与 IE 之外的其他浏览器兼容。

查看您的代码,您似乎想将 id="resultRow" 替换为 name="resultRow"

于 2013-07-16T21:12:11.730 回答
0

此行为是设计使然。
nameid是两个不同的东西。

另外,ids 必须是唯一的;您的 HTML 无效。

您应该class改用,并调用getElementsByClassName().

于 2013-05-01T17:02:43.460 回答
0

从什么时候开始name平等id?举个例子,有多少人有约翰·史密斯这个名字(除了医生)?尽管如此,它们都有唯一的 ID。这同样适用于您的 HTML。

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

于 2013-05-01T17:04:50.120 回答