2010-10-24 2 views
1

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

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

Можете ли вы привести примеры различий, которые вы видите? –

ответ

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

You can test it out here. Как @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); 
} 

You can test it out here.

+2

Вы можете сделать это без 'cells = row.getElementsByTagName (" td ")', поскольку '' имеет собственное свойство 'cells', как в' row.cells [1] .innerHTML'. – user113716

+0

@patrick - +1 - * полностью * пропущено, что здесь, обновлено, чтобы дать гораздо более эффективную версию –

+1

, которая работает! всем спасибо! – naimer

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

 Смежные вопросы

  • Нет связанных вопросов^_^