Ich muss sagen, dass viele der Antworten interessant sind, aber kürzlich hatte ich ein ähnliches Problem und die Lösung war extrem einfach, indem ich den DOM-Weg ging. Es ist anders, weil Sie nicht iterieren, sondern direkt auf das Ereignis zielen, das Sie benötigen, aber im Folgenden werde ich eine allgemeinere Antwort geben.
Ich hatte ein Bild in einer Reihe:
<table>
<td><tr><img class="folder" /></tr><tr>...</tr></td>
</table>
Und diesem Bild war ein Klickereignishandler zugeordnet:
imageNode.click(function () { ... });
Meine Absicht war es, den anklickbaren Bereich auf die gesamte Zeile zu erweitern, sodass ich zuerst alle Bilder und relativen Zeilen erhielt:
tableNode.find("img.folder").each(function () {
var tr;
tr = $(this).closest("tr");
// <-- actual answer
});
In der eigentlichen Antwortzeile habe ich nur Folgendes getan und eine Antwort auf die ursprüngliche Frage gegeben:
tr.click(this.onclick);
Also habe ich den Ereignishandler direkt aus dem DOM-Element abgerufen und in den jQuery-Click-Ereignishandler eingefügt. Klappt wunderbar.
Nun zum allgemeinen Fall. In den alten Tagen vor jQuery konnten alle Ereignisse mit zwei einfachen, aber leistungsstarken Funktionen an ein Objekt angehängt werden, die uns Sterblichen von Douglas Crockford geschenkt wurden :
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;
}
}
});
}