2012-04-19 2 views
0

J'utilise JQuery pour afficher une info-bulle après avoir cliqué sur une image. Jusqu'à présent, je peux sélectionner la ou les div (s) correcte (s), puis je peux identifier la sous-div correcte qui contient également le noeud de texte. Malheureusement, je ne suis pas en mesure d'obtenir le nœud de texte de la sous-div. Quel est le problème - je reçois 'null' après avoir appelé html() sur currentDescriptionContainer? Merci d'avance!Grab Text-Node après find() - utilisation

var tooltipItems = jQuery('.tooltipContainer').length; 
var i=0; 
for (i=0; i<tooltipItems; i++){ 
    jQuery('.tooltipContainer').eq(i).bind('click', function(){ 
    var currentContainer = jQuery('.tooltipContainer').eq(i); 
    var currentDescriptionContainer = currentContainer.find('div'); 
    var currentDescriptionText = currentDescriptionContainer.html(); 
    console.log(currentDescriptionText); 
    showRendererToolTipForIpad(this, currentDescriptionText); 
    hideRenderedToolTipAfterTimeout(); 
    }); 
} 
+3

Wow! Quel est le nom des variables longues? Il est si difficile à lire ... – elclanrs

+0

Pouvez-vous fournir du HTML pertinent? – Johan

Répondre

0

votre code pourrait être vraiment simplifié. essayez ce code, ouvrez la console et voir si l'exécution est correcte

var tooltipItems = $('.tooltipContainer'); 
tooltipItems.bind('click', function() { 
    var divs = $(this).find('div'), cdText; 

    console.log('Element has %d descendent div/s' , divs.length); 

    if (divs.length) { 
     cdText = divs.text(); 
     console.log('Text found: ' , cdText); 
     showRendererToolTipForIpad(this, cdText); /* this is the i-th DOM node */ 
     hideRenderedToolTipAfterTimeout(); 
    } 
}); 

Notez que html() lorsqu'il est appliqué à une collection d'éléments affecte uniquement le premier élément, donc dans cet exemple je place text() (et je n » sais combien d'éléments que vous vous attendez à récupérer)

a propos de votre code, je pense que vous créez une fermeture involontaire qui pourrait être une cause de votre problème: lorsque l'événement se produit un clic vous avez

var currentContainer = jQuery('.tooltipContainer').eq(i); 

mais puisque le cycle for a déjà atteint la fin, la variable i sera le dernier index de votre collection. Donc, peu importe quelle info-bulle vous cliquez, currentContainer sera toujours une référence en utilisant cet index

+0

Merci beaucoup ... votre code a fonctionné et il est assez intéressant pour moi de voir comment un développeur JQuery expériencé gère de tels problèmes! – Jochen