2010-04-26 7 views
0

J'ai un script qui vérifie la classe (entier) de a, exécute une instruction switch pour changer cette valeur entière en texte et ajoute le texte à un autre dans la même liste marque. J'utiliser la fonction .each() parce que chaque listitem commence par classe = _ [ID utilisateur] - chaque utilisateur peut avoir jusqu'à 5 entrées .. Assez expliquer - Heres le code:Comment utiliser correctement la commande .each() dans jQuery

<HTML> 
    <li class='_44074'><div class='_12' style='width:380px;'><div style='width:60px; float:left;'>1st</div><div class='verify-type' style='float:left; width:160px;'></div><div style='float:left; width:120px;'>04/26/10 07:29 AM</div></div></li> 
    <li class='_44074'><div class='_6' style='width:380px;'><div style='width:60px; float:left;'>2nd</div><div class='verify-type' style='float:left; width:160px;'></div><div style='float:left; width:120px;'>04/23/10 03:29 PM</div></div></li> 
    <li class='_44074'><div class='_12' style='width:380px;'><div style='width:60px; float:left;'>3rd</div><div class='verify-type' style='float:left; width:160px;'></div><div style='float:left; width:120px;'>04/23/10 03:18 PM</div></div></li> 
    <li class='_44074'><div class='_2' style='width:380px;'><div style='width:60px; float:left;'>4th</div><div class='verify-type' style='float:left; width:160px;'></div><div style='float:left; width:120px;'>04/23/10 02:28 PM</div></div></li> 
    </HTML> 

quand je l'utilise la fonction .each() pour parcourir chacun des listitems commençant par l'identifiant de l'utilisateur saisi ne trouve que la première valeur (dans ce cas _12) et l'applique à toutes les entrées; au lieu de trouver _12, _6, _12, _2 il trouve _12, _12, _12, _12 ... et applique la valeur de commutation "sangles de chaussures & dragonnes" à toutes les entrées - voici la java:

$("div#history-menu div#history-text li." + valueid).each(function(){ 
      valueid = $("div#center-box input").val(); 
    checkedvalue=""; 
    checkedvalue = $("div#history-menu div#history-text li." + valueid + " div").attr('class'); 
    switch(checkedvalue){ 
     case '_2':lcCheckedMessage = "Shoes"; break; 
     case '_4':lcCheckedMessage = "Shoe Straps"; break; 
     case '_6':lcCheckedMessage = "Shoes & Shoe Straps"; break; 
     case '_8':lcCheckedMessage = "Wrist Straps"; break; 
     case '_10':lcCheckedMessage = "Shoes & Wrist Strap"; break; 
     case '_12':lcCheckedMessage = "Shoe Straps & Wrist Strap"; break; 
    }; 
    $("div#history-menu div#history-text li." + valueid + " ." + checkedvalue + " .verify-type").text(lcCheckedMessage); 
}); 

Répondre

3

Cette ligne:

checkedvalue = $("div#history-menu div#history-text li." + valueid + " div").attr('class'); 

effectuera la recherche à nouveau, trouvant toujours le premier élément. Au lieu de cela, utiliser la valeur de this pour obtenir l'élément en cours:

checkedvalue = $(this).find('div').attr('class'); 

Vous devez faire quelque chose de similaire dans la dernière ligne, par exemple

$(this).find(".verify-type").text(lcCheckedMessage); 
+0

Holy Crap vous êtes génial !!! Merci beaucoup!! c'était parfait - tellement facile – sadmicrowave

+0

Utiliser '.find ('div')' retournera tous les divs imbriqués. Il y en a plusieurs (vu si vous faites défiler vers la droite). Vous devez le rendre spécifique au premier 'div'. – user113716

+0

@patrick: Vrai, mais 'attr (..)' obtiendra seulement la valeur d'attribut pour le premier élément, donc peu importe si plusieurs 'div' correspondent. – interjay