2012-10-08 7 views
5

ich eine Reihe von Dias aus der Basis Sektionen:JQuery Erhalten letzte Zeile der Tabelle innerhalb letzte Element in einer Reihe

<div id="slides"> 
    <section id="first"> 
     <section> 
      <table> 
       <thead> 
       </thead> 
       <tbody> 
        <tr id="somethingUnique"> 
        ... 
        </tr> 
       </tbody> 
      </table> 
     </section> 
     <section> 
      <table> 
       <thead> 
       </thead> 
       <tbody> 
        <tr id="somethingUnique"> 
        ... 
        </tr> 
       </tbody> 
      </table> 
     </section> 
     ... 
    </section> 
</div> 

Ich brauche greifen die ID der letzten Zeile aus der Tabelle in der letzten Auswahl Abschnitt des ersten Abschnitts.

Ich benutze die folgende Jquery, bekommen "undefined" zurück ... irgendwelche Ideen?

var lastListItem = $('#first:last-child table>tbody>tr:last').attr("id"); 
    alert(lastListItem); 
+0

I a [Geige] (http://jsfiddle.net/Tdjzj/) erstellt vereinfacht werden und es scheint zurückzukehren 'somethingUnique' –

Antwort

0
var lastListItem = $('#first section:last table tr:last').attr("id"); 
0
var lastListItem = $("#first").find("section").last().find("tr").last().attr("id"); 

ich lieber mit [0] .id statt .attr ("id") seit seinem einen weniger Methodenaufruf; Wenn Sie jedoch nicht sicher sind, dass Sie immer eine Tabelle in dieser DOM-Position haben, ist attr sicherer.

+0

Sie können Pseudo-Selektoren verwenden, um Elemente zu finden, aber ich entschied mich, meine Antwort mit verketteten Methoden für bessere Leistung zu schreiben. –

+0

Haben Sie gemessen, dass diese Lösung in Browsern, die 'querySelectorAll()' unterstützen, tatsächlich schneller ist? –

+0

@ FrédéricHamidi Nein, querySelectorAll könnte je nach Browser schneller sein. Es ist jedoch immer noch eine Methode, die eine lange Zeichenfolge analysieren muss, um festzustellen, welche Art von Elementen im DOM gesucht werden soll. Ich bevorzuge querySelectorAll (oder Pseudo-Selektoren in jQuery), wenn der Selektor kürzer ist, nicht länger. –

0

.find():

Holen die Nachkommen eines jeden Elements in der aktuellen Gruppe angepaßter Elemente, durch einen Selektor, Objekt jQuery gefiltertes oder Element.

​$("#first")​.find("tr:last").attr("id") 

oder einfacher in diesem Fall:

$("#first tr:last").attr("id") 

EXAMPLE

+0

Es gibt keine Notwendigkeit für $.Finde in diesem Fall, wie du gezeigt hast –

0

Die anderen Antworten arbeiten, aber das Problem mit dem Versuch ist die Tatsache, dass :last-child aufgebracht werden muss, zu dem untergeordneten Element (section), nicht dem übergeordneten Element (#first). Folgendes sollte

arbeiten
$('#first section:last-child table>tbody>tr:last').attr("id"); 

Und könnte

$('#first section:last-child tr:last-child').attr("id"); 

http://jsfiddle.net/e7mUD/1