IE10: getElementsByName() не возвращает элементы с одинаковым идентификатором в IE10

У меня есть таблица в JSP, которая динамически заполняется. Я использовал один и тот же идентификатор для всех строк таблицы.

В javascript я хочу получить все элементы строки таблицы с идентификатором "resultRow". и getElementsByName("resultRow") в js дает пустую htmlcollection в IE10

Есть ли какой-нибудь другой способ получить скрижали совпадающего идентификатора

Любая помощь с благодарностью

`вот мой фрагмент кода

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 ответа

Такое поведение является особенностью.
name а также id это две разные вещи.

К тому же, ids должен быть уникальным; Ваш HTML неверен.

Вы должны использовать class вместо этого и позвоните getElementsByClassName(),

Я только что подтвердил в своем собственном тестировании, что это изменение, которое Microsoft, похоже, внесло в IE10, чтобы сделать его совместимым с любым другим браузером на рынке. В любом другом браузере имя и имя - разные вещи. Но до IE 10 Microsoft решила действовать по-другому, что привело к множеству несовместимостей, как описано здесь. Это изменение исправило мой код, написанный для chrome, но, похоже, испортил код, написанный для IE.

Если вы просите своих пользователей включить "режим совместимости", он должен работать как прежде, но это, вероятно, не очень хорошее долгосрочное решение.

Хорошей новостью является то, что если вы решите эту проблему в своем коде, сделав идентификаторы ссылками на идентификаторы, а имена ссылаются на имена, ваш сайт будет совместим с другими браузерами, кроме IE.

Глядя на ваш код, кажется, вы хотите заменить id="resultRow" на name="resultRow"

С каких пор были name а также id равны? Чтобы привести пример, сколько людей имеют имя Джон Смит (кроме Доктора)? Несмотря на это, все они имеют уникальные идентификаторы. То же самое относится и к вашему HTML.

использование <tr name="resultRow"...>тогда вы можете получить доступ getElementsByName('resultRow')

Другие вопросы по тегам