2010-02-20 9 views
2

Ce problème me rend un peu fou.jquery traversant et tables

J'ai quelque chose comme ça

<h3>Feeds 
    <span><a class="smallbutton create_feed" href="javascript:;"> 
    <strong>Create New</strong> 
    </a> 
    </span> 
    <span class="div_form_add_feed"> 
    <a class="smallbutton btn_save_feeds" href="javascript:;"> 
    <strong> Add </strong></a> 
    </span> 
    </h3> 
<table cellpadding=0 cellspacing=1 class="table"> 
<tr><td> 
<div class="get_feeds_news">test</div></td></tr></table> 

Je veux la classe lien Ajouter « smallbutton btn_save_feeds » pour remplacer les div « get_feeds_news » avec autre chose. Mais je n'arrive pas à y accéder en utilisant $ (this) dans jQuery. Quelle est la bonne façon de parcourir à partir de la classe de lien Ajouter "smallbutton btn_save_feeds" pour changer quelque chose dans le div "get_feed_news"? J'ai essayé le suivant mais n'ai pas fonctionné.

$(this).closest('.get_feeds_news').html('hihi'); 

Est-ce le problème parce que c'est dans une table?

Merci d'avance.

+0

@Scott - J'ai ajouté une autre solution à ma réponse, mais s'il y aura un nombre défini de ces éléments, donner un ID à l'élément serait mieux que traversal. Si ce n'est pas le cas, consultez ma traversée mise à jour. – user113716

Répondre

1

closest() ne fonctionnera pas depuis l'élément que vous recherchez n'est pas un ancêtre du bouton.

Si get_feeds_news est la seule occurrence de cette classe, vous pouvez simplement utiliser $('.get_feeds_news')

Sinon, vous pourriez faire quelque chose comme:

$(this).closest('h3').next().find('.get_feeds_news')

jQuery a plusieurs façons de traverser. Ce n'est certainement pas la seule façon de s'y prendre. Si votre disposition change, il y aura un moyen d'accomplir ce dont vous avez besoin.

+0

ah .. c'est la chose. J'en ai 2 exemples. –

+0

J'ai ajouté un second exemple pour attraper le h3 le plus proche, puis passer à son frère suivant, et trouver votre get_feeds_news. – user113716

+0

brillant! ça marche! –

2

vous manque le point (plus une balise div de fermeture)

$(this).closest('.get_feeds_news').html('hihi'); 
+0

désolé à ce sujet. Je l'ai mal écrit dans l'exemple. Mais dans mon code j'avais le point et ne fonctionnait toujours pas. –

+0

Cela ne fonctionne pas. – user113716

0

essayez de régler votre code html, vous ne fermez pas votre get_feeds_news div:

<table cellpadding=0 cellspacing=1 class="table"> 
<tr><td> 
<div class="get_feeds_news"></div></td></tr></table> 
+0

désolé à ce sujet. Je l'ai mal écrit dans l'exemple. Mais dans mon code je l'ai fermé correctement. –

0

vous pouvez choisir l'un des deux éléments par

$('.get_feed_news:eq(0)') 

(ou 1 pour la deuxième)

ou, si vous avez 2 liens smallbutton btn_save_feeds (un pour chaque .get_feed_news), on peut utiliser:

$('.get_feed_news').eq($(this).index()) 

ce qui passe essentiellement index pour filtrer .get_feed_news avec l'index de l'appelant:]