2010-12-14 7 views
3

Contexte: J'effectue une mise à niveau sur un plug-in de galerie photo existant qui affiche une grande image au centre et des images de plus en plus petites de chaque côté.Existe-t-il un moyen de sélectionner une valeur attachée par .data()?

Alors ma question est la suivante: je mise des données sur chaque image qui donne l'index de l'image, l'index de l'image suivante, et l'indice de l'image précédente, comme ceci:

$(this).data('index', i).data('prev', i - 1).data('next', i + 1); 

Plus tard, j'aimerais pouvoir sélectionner une image basée sur son index. J'ai essayé ce qui suit, mais il ne semble pas fonctionner:

$('[data-index=' + index + ']'); 

Est-il possible de sélectionner un élément basé sur un morceau de données attaché avec .data()?

Répondre

4

Vous pouvez utiliser .filter(), comme ceci:

$('*').filter(function() { return $.data(this, 'index') == index; }) 

Cependant, * est très cher, car il fonctionne ce filtre sur tous les éléments, s'il vous plaît utiliser un sélecteur plus spécifique pour commencer.

+0

Sweet! Alors quelque chose comme '$ ('img'). Filter (fonction() {return $ .data (this, 'index') == index;})' devrait fonctionner, et être plus efficace que d'utiliser '*'. – Ender

+0

S'il y a beaucoup d'éléments sur la page, alors oui, ridiculement inefficace. jQuery doit passer au crible tous les éléments de la page et tester chacun de ces éléments. Si vous rétrécissez le sélecteur comme il l'a dit, c'est ok. – simshaun

+0

@Ender - yup, exactement. Si vous avez * beaucoup * d'éléments, il y a en réalité une façon complètement inverse de s'y prendre, mais essayez d'abord, car c'est beaucoup plus simple et plus facile à comprendre. –

1

approche légèrement alternatif:

Si l'on suppose que les images sont dans une série dans le code HTML, pourquoi ne pas simplement faire quelque chose comme ça?

$('#images img').eq(index)