Je dois dire que la plupart des réponses sont intéressantes, mais récemment, j'ai eu un problème similaire et la solution était extrêmement simple en suivant la voie DOM. C'est différent parce que vous n'itérez pas mais visez directement l'événement dont vous avez besoin, mais ci-dessous, je donnerai une réponse plus générale.
J'avais une image d'affilée:
<table>
<td><tr><img class="folder" /></tr><tr>...</tr></td>
</table>
Et cette image était associée à un gestionnaire d'événements Click:
imageNode.click(function () { ... });
Mon intention était d'étendre la zone cliquable à toute la ligne, j'ai donc d'abord obtenu toutes les images et les lignes relatives:
tableNode.find("img.folder").each(function () {
var tr;
tr = $(this).closest("tr");
// <-- actual answer
});
Maintenant, dans la ligne de réponse réelle , je viens de faire comme suit, en donnant une réponse à la question d'origine:
tr.click(this.onclick);
J'ai donc récupéré le gestionnaire d'événements directement à partir de l'élément DOM et l'ai placé dans le gestionnaire d'événements click jQuery. Fonctionne comme un charme.
Passons maintenant au cas général. Dans les anciens jours pré-jQuery, vous pouviez obtenir tous les événements attachés à un objet avec deux fonctions simples mais puissantes offertes aux mortels par Douglas Crockford :
function walkTheDOM(node, func)
{
func(node);
node = node.firstChild;
while (node)
{
walkTheDOM(node, func);
node = node.nextSibling;
}
}
function purgeEventHandlers(node)
{
walkTheDOM(node, function (n) {
var f;
for (f in n)
{
if (typeof n[f] === "function")
{
n[f] = null;
}
}
});
}