2010-11-18 8 views
0

Ich füge einige benutzerdefinierte Erweiterungen zu einem jQuery-UI-Widget mit Registerkarten hinzu. Eine der Sachen, die ich versuche zu tun, ist, den Text eines Links in jedem Tab-Panel zu automatisieren, indem ich den Wert des alt -Attributs des Bildes in der entsprechenden Registerkarte ergreife. Das Problem besteht darin, dass es nur für die erste Registerkarte funktioniert und die anderen Nullwerte zurückgeben.jQuery - Erfassen von Werten aus einem Attribut als sichtbaren Text

Here's a link to the test page. (Der Code für die Registerkarten läuft nicht enthalten ist, weil es das Problem nicht verwandt ist.)

Und hier ist der Abschnitt der jQuery, die mir Probleme ist zu geben:

$('.imageTabs').find('.link').each(function() { 
    $(this).find('a').each(function() { 
     $(this).html($(this).parent('.link').parent('.ui-tabs-panel').prev('.ui-tabs-nav').children('li.' + $(this).parent('.link').parent('.ui-tabs-panel').attr('id')).children('a').children('img').attr('alt')); 
    }); 
}); 

Antwort

3

Sie versuchen, zu viel auf einer Zeile IMO zu tun, und sollte auch jQuery eingebaute Selektoren statt $.find() wo möglich verwenden.

Praktischerweise haben Sie die href jeder Registerkarte auf #tab-1, die auch als jQuery-Selektor für Ihre Inhaltsbereiche funktioniert. Also ... funktioniert?

$('.ui-tabs-nav a').each(function() { 
    var name = $(this).find('img').attr('alt'); 
    var ref = $(this).attr('href'); 
    $(ref).find('.link').text(name); 
}); 
+1

'this.href' anstelle von' $ (this) .attr ('href') '- dasselbe Ergebnis, bessere Leistung. Außerdem ist '$ .find' nicht das gleiche wie' $ .fn.find', was ich * denke * hier zu sagen versuche. Nur eine technische Sache, obwohl –

+0

Ich musste es ändern ('.link a'), um es zu tun, was ich wollte, aber das hat funktioniert! Vielen Dank! – Tom

Verwandte Themen