2011-08-28 4 views
0

Je recevais une erreur de d.tagName est indéfini dans le code ci-dessous. Cela se produisait lorsque j'insérais un nouvel élément dans une liste par ordre alphabétique et qu'il était supérieur au dernier élément de la liste. Dans ce cas, il devrait être inséré à la fin de la liste. e et b sont les éléments à insérer et d est l'élément qui doit être inséré avant afin de maintenir l'ordre alphabétique. Cela fonctionne bien sauf pour le cas que j'ai mentionné où les éléments sont les derniers dans la liste.algorithme pour insertion alphabétique - cas particulier

while(d=d.nextSibling) 
    { 
    if(d.tagName=="undefined") 
     { 
     a.insertBefore(e,d); 
     a.insertBefore(b,d); 
     break; 
     } 
    else if(d.tagName.toLowerCase()==="a" && (b.innerHTML<d.innerHTML)) 
     {  
     d=d.previousSibling; 
     a.insertBefore(e,d); 
     a.insertBefore(b,d); 
     break; 
     } 
    } 
    return 1; 
+0

a obtenu un violon à montrer? – naveen

+0

Il serait utile de voir la fonction dans laquelle ce code existe, et tout autre code connexe. Les deux conditions peuvent utiliser certaines explications (ie 'd.tagname == 'undefined'' et' d.tagName.toLowerCase() === "a" ... ') – James

+0

Basiquement, ma boucle échoue car elle passe le dernier élément, je peux utiliser typeof pour attraper ça. MDN Document https://developer.mozilla.org/fr/JavaScript/Reference/Operators/Special/typeof –

Répondre

1

algorithme est donc (est un code pseudo)

set inserted to false 
go through the list 
if the current item of the list is alphabetic comes after the one to be inserted 
then 
insert it before 
mark it as inserted ie inserted is true 


If after going though the whole list (ie inserted is false) then just append it to the list 
Questions connexes