2009-10-25 5 views
1

Quelqu'un peut-il s'il vous plaît dites-moi pourquoi cela ne fonctionne pas? J'essaie d'afficher et de masquer le contenu.Jquery parents() aide

Voici mon balisage

<div class="entry"> 
    <p class="posted"> 
    test<br /> 
    <a href="#" class="toggle" title="Show Comments"> 
     Show/Hide 
    </a> 
    </p> 
    <div class="box" class="comment"> 
    test hidden comment 
    </div> 
</div> 

$(function() { 
    $('div.box').hide(); 
    $('a.toggle').click(function() { 
    $(this).parents('.entry').next('div.box').toggle(400); 
    }); 
}); 

La façon dont cet exemple se trouve en ce moment, si je prends la dernière fermeture div et le déplacer après la balise p de fermeture, il fonctionne très bien, mais montre et cache tous contenu caché (divs) qui n'est pas ce que je suis après. Je voudrais seulement montrer le contenu associé à chaque lien.

+0

Avez-vous inscrit deux fois pour poser la même question? http://stackoverflow.com/questions/1620149/is-there-a-way-to-make-this-jquery-script-dynamic – Mottie

Répondre

1

Essayez d'utiliser .parent au lieu de .parents.

cela fonctionnera:

$(function() { 
     $('div.box').hide(); 
     $('a.toggle').click(function() { 
     $(this).parent('.posted').next('div.box').toggle(400); 
     }); 
    }); 
+0

Merci Q8, je viens de l'essayer et ça ne marche pas. :( – Jack

+0

l'élément 'div.box' n'est pas un frère de 'div.entry' il devrait être 'p.posted' –

+0

Hey Q8, oui, ça a marché, merci! Une autre petite question que je n'ai aucune idée quant à pourquoi ... mais quand je clique sur le lien de test, le navigateur ouvre le contenu caché et en même temps, pousse/fait défiler le contenu.Le même comportement que lorsqu'un utilisateur clique sur le lien "Top" commun pour revenir en haut de la page. Savez-vous pourquoi? – Jack

0
class="comment" overrides class="box", use class="comment box" 
+0

Salut Parkim, parlez-vous du problème que j'ai avec la page qui saute au sommet? J'ai essayé mais ça fait toujours la même chose. – Jack

2

Ce n'est pas parents qui est le problème, c'est le next(). next() récupère les éléments frères, alors que vous avez besoin des sous-éléments imbriqués. Utilisez children() à la place. Essayez cela, il a travaillé pour moi:

$(function() { 
    $('div.box').hide(); 
    $('a.toggle').click(function() { 
    $(this).parents('.entry').children('div.box').toggle(400); 
    }); 
}); 
+0

Merci Zombat. J'ai fait les changements et votre solution fonctionne également. J'ai aussi un problème où lorsque le lien est cliqué pour ouvrir et fermer la boîte, la page saute vers le haut. Savez-vous pourquoi c'est? – Jack

+0

Salut Jack, oui, c'est parce que le 'href' du lien est égal à' # '. C'est la syntaxe pour une ancre nommée, et si aucun nom n'est donné après le '#', le navigateur va juste au dessus de la page. Changez votre lien vers 'href =" javascript: void (0) "' et il ne le fera pas. – zombat

0

Il fonctionne si vous changez next() à find() ou children():

$(function() { 
    $('div.box').hide(); 
    $('a.toggle').click(function() { 
    $(this).parents('.entry').find('div.box').toggle(400); 
    }); 
}); 

C'est parce que next() obtient les frères et sœurs de l'objet, tandis que find() recherches les descendants. Lorsque votre code appelle next() l'objet est '.entry' qui n'a pas de frères et sœurs, vous pouvez utiliser children() comme suggère zombat ou find() comme je l'ai fait pour localiser div.box comme il est un descendant de '.entry'.

+0

Merci Beggs. Puis-je demander .. Que fait-il exactement? Je veux dire, la balise parent .. Quelle est sa fonction et quand elle trouve les éléments, comment puis-je y accéder? – Jack

+0

ID: '$ ('a.toggle'). Click (...': cela signifie ajouter une méthode "onClick()" à tous les éléments de type 'a' avec la classe 'toggle' 'function () {$ (this) .parents ('. entry'). find ('div.box'). toggle (400);} ': fonction anonyme affectée à l'événement click disant" prendre l'élément qui a été cliqué et trouver tous les ancêtres ('parents()') prennent n'importe quel ancêtre avec la classe '.entry' et trouvent n'importe lequel de ses descendants avec le type 'div' et la classe 'box' et appellent' toggle() 'sur cet élément. 'next()' la fonction serait sur un * sibling * de '.entry1 un élément au même niveau de l'arborescence DOM. – beggs

0

Salut Parkim, vous parlez de la question j'ai avec la page sauter au sommet? J'ai essayé ce mais il fait toujours la même chose. - Jack

Non, en raison du remplacement, vous ne pouvez pas utiliser le sélecteur ".box". page saute vers le haut, à cause de l'ancre "#", vous devriez utiliser "return false" pour empêcher le gestionnaire "click" par défaut.

$("a").click(function() { /* your code */ return false; }); 
0

Tout comme une alternative, j'utiliser closest et find au lieu de parent et children respectivement, je pense qu'il est plus une question de préférence cependant.

$(function() { 
    $('div.box').hide(); 
    $('a.toggle').click(function() { 
    $(this).closest('.entry').find('div.box').toggle(400); 
    return false; 
    }); 
});