我在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();
}
}`
答案 0 :(得分:1)
此行为是设计使然
name
和id
是两回事。
此外,id
必须是唯一的;您的HTML无效。
您应该使用class
代替,并致电getElementsByClassName()
。
答案 1 :(得分:1)
我刚刚通过自己的测试证实,这是微软似乎在IE10中做出的改变,使其与市场上的其他浏览器兼容。在每个其他浏览器中,ID和名称是不同的东西。但是直到IE 10,微软选择以不同的方式做事,这导致了许多不兼容性,如here所述。这个更改修复了我为chrome编写的代码,但似乎已经破坏了为IE编写的代码。
如果您指示用户打开“兼容模式”,它应该像以前一样工作,但这可能不是一个好的长期解决方案。
好消息是,如果您通过ID引用id和名称引用名称来修复此问题,那么您的网站将与IE之外的其他浏览器兼容。
查看你的代码,似乎你想用name =“resultRow”替换id =“resultRow”
答案 2 :(得分:0)
name
和id
何时相等?举个例子,有多少人有John Smith这个名字(博士除外)?尽管如此,它们都有唯一的ID。这同样适用于您的HTML。
使用<tr name="resultRow"...>
,然后您就可以访问getElementsByName('resultRow')