在IE中使用javascript更改表行的ID

时间:2010-07-05 07:15:27

标签: javascript internet-explorer

你好我有一个有几行的表。我的应用程序中有一个添加按钮,允许在任何rowIndex中添加行。我使用insertRow方法在特定位置插入行。因此,一旦插入一行,我就会更改所有行的表行ID,以按升序排列它们。现在我一直在用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 :(得分:0)

更新:首先尝试@Spinon的想法。

更新:实际上似乎是ID冲突,IE正确地防止了这种情况发生,而其他浏览器则乐意让它通过。

原始回答:

我的猜测是你的循环创建了一个id碰撞:当循环运行时,id被设置两次。 IE可以(正确地)阻止重复ID的设置。

我会先尝试取消设置ID:

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;} 

 }

但是,我不明白你如何使用行ID来改变排序?

答案 1 :(得分:0)

我想说尝试使用setAttribute函数和id属性来更改id。

答案 2 :(得分:0)

问题是 for..in循环无法确保订单。这是<{3}}之一,为什么你应该为数组避免它们。 (还有另一个,请看我的链接) 使用简单的循环代替(对于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');
}

完美跨浏览器。