1

我似乎在 Mozilla 和 IE 之间得到了不同的 fromDate 结果。有没有更可靠的跨浏览器方式来做到这一点?[编辑] 我实际上得到了不同的列值![/编辑]

<tr id='id3332201010241'  />
 <td>20101024</td>
 <td>20101025</td>
 <td>1415</td>
 <td>1445</td>
 <td>INVDROP</td>  
 <td>H4T1A3</td> 
 <td><a href='#' onclick='selectEditActivity("id3332201010241");' >Click Here</a></td>
</tr>

function selectEditActivity(pass_id){ 
 row = document.getElementById(pass_id);    
 var seq = document.getElementById(pass_id).getAttribute("seq");
 var from_date   = row.childNodes[1].innerHTML; 
 alert(from_date);
 var to_date   = row.childNodes[3].innerHTML;  
}
4

2 回答 2

3

你错误地做<tr>了一个自闭标签

<tr id='id3332201010241' />

应该

<tr id='id3332201010241'>

另一件事是它childNodes可能无法按您的预期工作,因为它将包含文本节点。如果要<td>连续获取元素,则应使用:

var row       = document.getElementById(pass_id);  
var columns   = row.getElementsByTagName("td"); 
var from_date = columns[1].innerHTML; 
var to_date   = columns[3].innerHTML; 

childNodes 节点列表由元素的所有子节点组成,包括(空)文本节点和注释节点。 @quirksmode

于 2010-10-24T18:29:03.537 回答
2

您会看到不同浏览器处理空白的方式不同的结果。相反(对于更一般的情况),您可以使用getElementsByTagName()确保获得某种类型的子元素(<td>在这种情况下),如下所示:

function selectEditActivity(pass_id){ 
  var row = document.getElementById(pass_id),
      cells = row.getElementsByTagName("td"),
      seq = row.getAttribute("seq"),
      from_date = cells[0].innerHTML,
      to_date = cells[1].innerHTML;  
  alert("From: " + from_date + "\nTo: " + to_date);
}

你可以在这里测试一下。正如@patrick指出的那样,这里不需要它,只需使用 的.cells<tr>如下所示:

function selectEditActivity(pass_id){ 
  var row = document.getElementById(pass_id),
      seq = row.getAttribute("seq"),
      from_date = row.cells[0].innerHTML,
      to_date = row.cells[1].innerHTML;  
  alert("From: " + from_date + "\nTo: " + to_date);
}

你可以在这里测试一下

于 2010-10-24T18:25:07.763 回答