2009-09-09 7 views
0

quelqu'un peut-il offrir un sélecteur pour en finir avec cette horrible morceau de code:Un joli sélecteur pour enlever ce code terrible

// img is the image element... 
var descriptionContent = $(".descriptionContent", img.parent("td").parent("tr").next("tr")); 

Le HTML ressemble à ceci:

<table> 
    <tr> 
     <td><img /></td> 
    </tr> 
    <tr> 
     <td><div class="descriptionContent" /></td> 
    </tr> 
    <!-- Repeat n times --> 
</table> 

Étant donné un utilisateur cliqué sur le img, j'ai besoin d'obtenir le prochain (et seulement le prochain) .descriptionContent élément.

Merci,
K

+1

Votre sélection actuelle ne semble pas terrible pour moi . –

+0

Vraiment? Mais si je change la structure pour envelopper l'image dans quelque chose plus tard, je vais devoir refaire le code? Ne serait-il pas préférable d'avoir quelque chose qui va sélectionner le parent '* correctement *'? – Kieron

Répondre

5

Puisque vous êtes inquiet pour envelopper l'image dans quelque chose, essayez ceci:

var descriptionContent = $(".descriptionContent", img.closest("tr").next("tr")); 

La commande la plus proche trouve ancêtre le plus proche correspondant au sélecteur donné. See here.

+0

ne le savais pas. Merci! – janoliver

+0

Je ne le savais pas non plus, merci Walt! - fonctionne un régal. – Kieron

+0

Ouais c'est un peu pratique :) Heureux de vous aider. –

0

Je pense que vous allez entendre beaucoup parler de la façon dont cela est structuré en général. Si vous éliminez la table, beaucoup de ce problème disparaît.

Quelque chose comme:

<div class="imgAndContent"> 
    <img src="blah.jpg"> 
    <span class="someDescription">Description.</span> <!-- or div, you choose based on your need --> 
</div> 

Ensuite, vous pouvez tout simplement faire ...

var descriptionContent = $(this).next(); 

Lorsque l'utilisateur clique ...

+0

La table est valide, il s'agit de données tabulaires. – Kieron

+0

Eh bien, je suppose que deux colonnes de données est toujours une table. Pas tout à fait en noir et blanc, mais je t'entends. – cgp

Questions connexes