jquery, Selektor für Klasse innerhalb von id


91

Wie soll ich unten die Elemente auswählen, die die Klasse my_classinnerhalb des Elements enthalten id = "my_id"?

Beachten Sie, dass das Element möglicherweise auch eine andere Klasse hat, für die ich nicht auswähle.

<div id = "my_id">
    <span class = "my_class hidden">hi</span>
    <span class = "my_class">hello</span>
</div>

hat versucht

$("#my_id [class*=my_class ]")

Antworten:



48

Verwenden Sie einfach den einfachen alten Klassenwähler.

$('#my_id .my_class')

Es spielt keine Rolle, ob das Element auch andere Klassen hat. Es hat die Klasse .my_class und befindet sich irgendwo in #my_id , sodass es mit diesem Selektor übereinstimmt.

In Bezug auf die Leistung

Laut der Leistungsdokumentation zum jQuery-Selektor ist es schneller, die beiden Selektoren wie folgt getrennt zu verwenden:

$('#my_id').find('.my_class')

Hier ist der relevante Teil der Dokumentation:

ID-basierte Selektoren

// Fast:
$( "#container div.robotarm" );

// Super-fast:
$( "#container" ).find( "div.robotarm" );

Der .find()Ansatz ist schneller, da die erste Auswahl ohne Durchlaufen der Sizzle-Auswahl-Engine ausgeführt wird. Nur-ID-Auswahlen werden mit verwendet document.getElementById(), was extrem schnell ist, da sie für den Browser nativ ist.

Die Auswahl nach ID oder Klasse allein (unter anderem) ruft vom Browser bereitgestellte Funktionen auf, document.getElementById()die recht schnell sind, während die Verwendung eines absteigenden Selektors die Sizzle-Engine wie erwähnt aufruft, die zwar schnell, aber langsamer als die vorgeschlagene Alternative ist.



1

Ich denke, Sie bitten darum, nur <span class = "my_class">hello</span>dieses Element auszuwählen . Sie haben dies getan. Wenn ich Ihre Frage richtig verstehe, ist dies die Antwort.

$("#my_id [class='my_class']").addClass('test');

DEMO


$("#my_id .my_class")ist das kürzere Äquivalent; In diesem Fall erhalten Sie nichts, wenn Sie die Attributauswahl verwenden.
Doppelgreener

Ich hoffe, dass dies auch den gleichen Job gemacht hat wie Ihre Antwort. Während ich die von Ihnen beantwortete Frage beantworte, habe ich nicht bemerkt, dass ich die Frage seit der Beantwortung nicht gelöscht habe.
Thirumalai Murugan

1

Auch $( "#container" ).find( "div.robotarm" );
ist gleich:$( "div.robotarm", "#container" )

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.