die Suche nach bestimmten unmittelbar untergeordneten Elemente eines Elements mit Prototyp
Folgende DOM-Struktur:
<ul>
<li class="item">yes</li>
<li>no</li>
<li class="item">yes</li>
<li>
<ul>
<li class="item">no</li>
</ul>
</li>
</ul>
Vorausgesetzt, ich habe die äußere <ul>
im $ul
. Wie bekomme ich die zwei unmittelbare Kinder, die die item
-Klasse?
In jQuery ich würde etwas schreiben wie dieses:
$ul.children().filter(".item")
$ul.children(".item")
$ul.find("> .item")
Wie kann ich diese mit Prototyp?
Ich habe Folgendes versucht ...
$ul.select("> .item") //WRONG
... aber es tut, tut genau das Gegenteil und gibt die eine innere <li>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Würden Sie tun etwas sehr ähnlich, funktionell, jQuery (1. Beispiel), obwohl der Prototyp nicht über ein
filter
Methode, es hat zwei weitere generische Methoden:findAll
undgrep
. Hier können Sie beides verwenden. grep erläutert hier:oder findAll:
Und hier ist ein Beispiel: http://jsfiddle.net/RuBzq/.
Was du versucht hast (
ul.select("> .item")
) nicht funktioniert, da der Selektor nur tests Nachkommen vonul
. Daul
unbekannt ist der Selektor,>
startet nicht vonul
aber aus den Elementen unter ihm. Also ist alles, das ist nicht ein unmittelbarer Nachkomme vonul
entsprechenul.select('> *')
zum Beispiel. Und das ist, warumul.select('> .item')
nur Spiele.items
sind Nachkommen von etwas innerhalb der set -. Wenn jQuery funktioniert anders, das ist ein Mist.wenn Ihr ul id Foo Sie könnten dies tun:
Seltsam genug, keine dieser arbeiten..
getElementsBySelector
werden soll, den Gegenwert von$$()
, aber eindeutig ist es nicht. Scheint ein bug in Prototype zu mir...Das funktioniert, aber scheint wenig Wert...
>
diese Weise in Prototyp, siehe meine Antwort. Und getElementsBySelector ist veraltet, zu Gunsten von Element#wählen.