Изменить идентификатор строки таблицы, используя JavaScript в IE - PullRequest
0 голосов
/ 05 июля 2010

Здравствуйте, у меня есть таблица, в которой есть несколько строк. И у меня есть кнопка добавления в моем приложении, которая позволяет добавлять строки в любом rowIndex. Я использую метод insertRow для вставки строк в определенную позицию. Поэтому, вставив строку, я меняю идентификаторы строк таблицы всех строк, чтобы расположить их в порядке возрастания. Сейчас я занимаюсь разработкой этого приложения на FF, и оно идет довольно хорошо. Сейчас я делаю несколько изменений в коде, чтобы он работал в IE. Но это просто не работает в IE. Я тестировал этот код в течение последних двух дней, он работает в FF и Chrome, но не в IE. Я не уверен, какую ошибку я совершаю. Я просто воссоздаю ситуацию с примером, и это код для этого примера. Пожалуйста, помогите мне и скажите, в чем может быть ошибка, которую я совершаю, чтобы она не работала в IE Любые предложения будут очень полезны.

<html>
<head>
<script type = 'text/javascript'>
function getIds()
{
var elem = document.getElementsByTagName("tr");

 for(var i in elem)
 {
 if(elem[i] && elem[i].id!=null && elem[i].id!='')
 alert(elem[i].id);
 }
}

function changeIds()
{
var elem = document.getElementsByTagName("tr");

 for(var i in elem)
 {
 if(elem[i] && elem[i].id!=null && elem[i].id!='')
 { index = Number(elem[i].rowIndex)+1; elem[i].id = "tabsf_"+index;} 

 }
 alert('change');
}
</script>
</head>
<body>
<table id="tabsf">
 <tbody>
  <tr id="tabsf_1"><td>1</td><td>2</td></tr>
  <tr id="tabsf_2"><td>3</td><td>4</td></tr>
  <tr id="tabsf_5"><td>5</td><td>6</td></tr>
  <tr id="tabsf_3"><td>7</td><td>8</td></tr>
  <tr id="tabsf_4"><td>9</td><td>10</td></tr>
 </tbody>
</table>
<table><tr><td><input type="button" name="hach" value="getIds" onclick="getIds()" /></td>
<td><input type="button" name="hach" value="Change Ids" onclick="changeIds()" /></td></tr></table>
</body>
</html>
</code>

Ответы [ 3 ]

0 голосов
/ 05 июля 2010

Я бы сказал, попробуйте использовать функцию setAttribute против свойства id для изменения идентификатора.

0 голосов
/ 05 июля 2010

Проблема в том, что for..in loop не гарантирует порядок . Это одна из ошибок , почему вы должны избегать их для массивов . (есть еще, смотрите мою ссылку) Используйте простой цикл for (для i..n)

function getIds() {
  var elem = document.getElementsByTagName("tr");
  for (var i = 0; i < elem.length; i++) {
    if (elem[i].id) {
      alert(elem[i].id);
    }
  }
}

function changeIds() {
  var elem = document.getElementsByTagName("tr");
  for (var i = 0; i < elem.length; i++) {
    if (elem[i].id) {
      index = Number(elem[i].rowIndex) + 1;
      elem[i].id = "tabsf_" + index;
    }
  }
  alert('change');
}

Прекрасно работает в кросс-браузерном режиме.

0 голосов
/ 05 июля 2010

Обновление: Попробуйте сначала идею @ Спинона.

Обновление: Похоже, что на самом деле произошла коллизия идентификаторов, что IE справедливо предотвратило, а другие браузеры с радостью пропустили.

Оригинальный ответ:

Я предполагаю, что ваш цикл создает столкновение id: id устанавливается дважды во время выполнения цикла. IE может (справедливо) блокировать настройку дублированного идентификатора.

Я бы сначала попытался сбросить идентификаторы:

for(var i in elem)
 {

 if(elem[i] && elem[i].id!=null && elem[i].id!='')
  elem[i].id =  elem[i].id + "_temp";    
 }


for(var i in elem)
 {
 if(elem[i] && elem[i].id!=null && elem[i].id!='')
 { index = Number(elem[i].rowIndex)+1; 
   elem[i].getElementsByTagName("td")[0].innerHTML = "tabsf_"+index;    
   elem[i].id = "tabsf_"+index;} 

 }

Однако я не понимаю, как вы используете идентификаторы строк для изменения сортировки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...