Devo dizer que muitas das respostas são interessantes, mas recentemente tive um problema semelhante e a solução foi extremamente simples, seguindo o caminho do DOM. É diferente porque você não itera, mas mira diretamente no evento que precisa, mas abaixo darei uma resposta mais geral.
Eu tive uma imagem em uma fileira:
<table>
<td><tr><img class="folder" /></tr><tr>...</tr></td>
</table>
E essa imagem tinha um manipulador de eventos de clique anexado a ela:
imageNode.click(function () { ... });
Minha intenção era expandir a área clicável para toda a linha, então primeiro obtive todas as imagens e linhas relativas:
tableNode.find("img.folder").each(function () {
var tr;
tr = $(this).closest("tr");
// <-- actual answer
});
Agora, na linha de resposta real, fiz o seguinte, dando uma resposta à pergunta original:
tr.click(this.onclick);
Então, busquei o manipulador de eventos diretamente do elemento DOM e o coloquei no manipulador de eventos jQuery click. Funciona como um encanto.
Agora, para o caso geral. Nos velhos tempos pré-jQuery, você podia anexar todos os eventos a um objeto com duas funções simples, porém poderosas, concedidas a nós mortais por 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;
}
}
});
}