Devo dire che molte delle risposte sono interessanti, ma recentemente ho avuto un problema simile e la soluzione è stata estremamente semplice seguendo il DOM. È diverso perché non iterate ma mirate direttamente all'evento di cui avete bisogno, ma di seguito darò una risposta più generale.
Ho avuto un'immagine di fila:
<table>
<td><tr><img class="folder" /></tr><tr>...</tr></td>
</table>
E a quell'immagine era associato un gestore eventi click:
imageNode.click(function () { ... });
La mia intenzione era di espandere l'area cliccabile su tutta la riga, quindi ho prima ottenuto tutte le immagini e le relative righe:
tableNode.find("img.folder").each(function () {
var tr;
tr = $(this).closest("tr");
// <-- actual answer
});
Ora nella riga di risposta effettiva ho appena fatto la seguente, dando una risposta alla domanda originale:
tr.click(this.onclick);
Quindi ho recuperato il gestore eventi direttamente dall'elemento DOM e l'ho inserito nel gestore eventi click jQuery. Funziona come un fascino.
Ora, al caso generale. Ai vecchi tempi pre-jQuery si potevano ottenere tutti gli eventi collegati a un oggetto con due funzioni semplici ma potenti donate a noi mortali da 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;
}
}
});
}