2010-05-23 7 views
0

Ok, cela m'a tué toute la nuit, je veux dire que je travaille sur ce code depuis au moins 8 heures maintenant. Quel est le problème avec ça, argggg.nextSibling issues

Je suis en train de mettre à jour tous les <span id="column_[row index number]_[column index number]_[layout position number]"> à incrémentons jusqu'à la prochaine id="row_[row index number]"tr element, les éléments tr qu'il devrait être à la recherche en a un id de tr_[row index number]_[column index number]_[layout position number] mais pour un dieu sait quelle raison, il me donne des problèmes. Il met à jour le même <span> tag 2x, et cela le change de la valeur désirée à 1 de plus que ce qu'elle devrait être ... Il n'y a que 1 <span> tag dans le firstChild <td> element de chacun des <tr> elements. Je ne comprends tout simplement pas pourquoi il est réglé 2x pour seulement 1 d'entre eux, et il semble que c'est aléatoire ou quelque chose. argggg.

Il n'y a qu'un seul élément <span> dans la balise <td id="tdcolumn_[row index number]_[column index number]_[layout position number]>, mais pour une raison quelconque, il appelle la même balise deux fois. Il devrait seulement l'appeler une fois. arggg. Je ne comprends pas pourquoi ??

Voici mon code quelqu'un s'il vous plaît aidez-moi ici ...

// Reorder all columns, if any, in the other rows after this 1. 
if (aRowId != 0 && lId.indexOf("tr_" + aRowId) == 0 && rowComplete != aRowId) 
{ 
    var tempTr = lTable.childNodes[i].childNodes[p]; 


    while(tempTr.nodeType == 1 && tempTr.nextSibling != null) 
    { 
     var tempId = tempTr.getAttribute("id"); 

     if (!tempId) continue; 

     if (tempId.indexOf("row_") == 0) 
     { 
      // All done this row, set it to completed! 
      rowComplete = aRowId; 
      break; 
     } 

     if (tempTr.hasChildNodes) 
     { 

      var doneChilds = false; 

      // grab the id where tdcolumn_{aRowId}.indexOf = 0. 
      for (fcTd = 0; fcTd<tempTr.childNodes.length; fcTd++) 
      { 
       if (tempTr.childNodes[fcTd].nodeName == '#text') continue; 

       var tempfcId = tempTr.childNodes[fcTd].getAttribute("id"); 

       if (!tempfcId) continue; 

       if (tempfcId.indexOf("tdcolumn_" + aRowId) != 0) continue; 

       // looping through the children in the <td> element here. 
       if (tempTr.childNodes[fcTd].hasChildNodes) 
       { 
        for (x = tempTr.childNodes[fcTd].childNodes.length-1; x>0; x--) 
        { 
         if (tempTr.childNodes[fcTd].childNodes[x].nodeName == '#text') continue; 

         var tempSpanId = tempTr.childNodes[fcTd].childNodes[x].getAttribute("id"); 

         if (!tempSpanId) continue; 

         if (tempSpanId.indexOf("column_") != 0) 
          continue; 

         // alert(tempSpanId); 

         alert(tempTr.childNodes[fcTd].childNodes[x].nodeName); 

         var tSpanId = new Array(); 
         tSpanId = tempSpanId.split("_"); 

         if (currColumnId == 0) 
         { 
          currColumnId = parseInt(tSpanId[1]); 
          var incCol = currColumnId; 
         } 

         incCol++; 

         // alert("currColumnId = " + currColumnId + "\n\ntSpanId[1] = " + tSpanId[1] + "\n\nincCol = " + incCol); 

         // Set the new Id's and Text, after which we can exit the for loop. 
         tempTr.childNodes[fcTd].childNodes[x].setAttribute("id", "column_" + incCol); 
         tempTr.childNodes[fcTd].childNodes[x].setAttribute("class", "dp_edit_column"); 
         tempTr.childNodes[fcTd].childNodes[x].innerHTML = oColumnText + " " + incCol; 
         // tempTr.childNodes[fcTd].setAttribute("id", "tdcolumn_" + aRowId + "_" + (parseInt(tSpanId[1])+1) + "_" + tSpanId[3]); 

         doneChilds = true; 

         break; 
        } 
       } 
       else 
        continue; 

       if (doneChilds == true) 
        continue; 
      } 
     } 
     else 
      continue; 

     tempTr = tempTr.nextSibling; 
    } 
} 

S'il vous plaît aidez-moi, Merci :)

+0

Vous voudrez peut-être marquer ceci avec l'étiquette de langue appropriée (Javascript?). –

+0

Merci, oui, je viens de le faire ... – SoLoGHoST

+0

@SoLoGHoST: Cela ressemble à une opportunité parfaite pour passer à un framework JavaScript. La manipulation DOM à ce niveau de complexité devient beaucoup plus facile et plus portable de cette façon. Aussi - avez-vous essayé de définir un point d'arrêt dans les outils de développement de votre navigateur et de parcourir le code ligne par ligne? Devrait être assez facile de trouver ce qui ne va pas avec un débogueur ... – Tomalak

Répondre

2

Bien que je ne pense pas que je peux résoudre votre problème sans que les parties concernées HTML , je vois au moins une erreur dans votre code:

if (doneChilds = true) 

Cette Evalue toujours à true. Il faut lire:

if (doneChilds) 

BTW, vous n'avez pas besoin getAttribute ici:

var tempfcId = tempTr.childNodes[fcTd].getAttribute("id"); 

utiliser Just:

var tempfcId = tempTr.childNodes[fcTd].id; 

Ne jamais définir un nom de classe en utilisant setAttribute, comme ici:

tempTr.childNodes[fcTd].childNodes[x].setAttribute("class", "dp_edit_column"); 

Utilisation:

tempTr.childNodes[fcTd].childNodes[x].className = "dp_edit_column"; 

(la même chose est vraie pour la ligne au-dessus de celui-ci, le réglage de la id d'un élément).

+0

Bonjour Marcel Korpel, si vous voulez, je peux vous envoyer le lien et l'accès à la partie Admin du forum, puisque vous en auriez besoin pour voir l'exemple. Parce que c'est dans la partie Administration du forum. Ce serait trop de travail pour le sortir de là, mais je suppose que c'est possible ... Faites-moi savoir si vous pouvez toujours aider, k? J'apprécie vraiment ça !!! :) – SoLoGHoST