вопрос о дочерних узлах - PullRequest
       37

вопрос о дочерних узлах

1 голос
/ 24 октября 2010

Кажется, я получаю разные результаты от даты между Mozilla и IE. Есть ли более надежный кросс-браузерный способ сделать это? [править] Я на самом деле получаю разные значения столбца! [/ edit]

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

Ответы [ 2 ]

3 голосов
/ 24 октября 2010

Вы ошибочно сделали <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 nodeList состоит из всех дочерних узлов элемента, включая (пустые) текстовые узлы и узлы комментариев. @ quirksmode

2 голосов
/ 24 октября 2010

Вы видите результат различий в том, как разные браузеры обрабатывают пробелы. Вместо этого (для более общих случаев) вы можете использовать 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);
}

Вы можете проверить это здесь .

...