2010-10-24 5 views
1

Je semble obtenir des résultats différents de fromDate entre Mozilla et IE. Existe-t-il un moyen plus fiable de faire cela? [edit] J'obtiens des valeurs de colonnes différentes! [/ 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

Pouvez-vous fournir des exemples des différences que vous voyez? –

Répondre

2

Vous voyez le résultat de différences dans la façon dont les différents navigateurs gèrent l'espace blanc. Au lieu de cela (pour plus de cas généraux), vous pouvez utiliser pour getElementsByTagName() à sûr obtenir un certain type d'élément enfant (<td> dans ce cas), comme ceci:

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. Comme @patrick souligne cependant, il n'est pas nécessaire ici, il suffit d'utiliser la .cells du <tr>, comme ceci:

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

Vous devriez pouvoir le faire sans 'cells = row.getElementsByTagName (" td ")' car un '' a sa propre propriété 'cells', comme dans' row.cells [1] .innerHTML'. – user113716

+0

@patrick - +1 - * complètement * négligé que ici, mis à jour pour donner la version beaucoup plus efficace –

+1

qui fonctionne! Merci tout le monde! – naimer

3

Vous INDU <tr> une étiquette auto fermeture-

<tr id='id3332201010241' /> 

devrait être

<tr id='id3332201010241'> 

Une autre chose est que childNodes peut ne pas fonctionner comme prévu car il contient des nœuds de texte. Si vous souhaitez obtenir <td> éléments dans une rangée, vous devez utiliser:

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

Le childNodes nodeList se compose de tous les nœuds enfants de l'élément, y compris les nœuds de texte (vide) et nœuds de commentaire. @quirksmode