Ich versuche, eine jQuery-Plugin (findFirst()
), um das erste Kind mit einer bestimmten Eigenschaft (etwas in der Mitte der find()
und children()
Funktionen zu finden zum Beispiel angesichts diesen Auszeichnungs.Wie entwickle ich ein Jquery-Plugin, um das erste Kind zu finden, das mit einem Selektor übereinstimmt?
<div id="start">
<div>
<span>Hello world</span>
<ul class="valid-result"> ... </ul>
<ul class="valid-result">
<li>
<ul class="not-a-result"> ... </ul>
</li>
</ul>
<div>
<ul class="valid-result"> ... </ul>
</div>
</div>
</div>
Wenn Sie fragen nach $("#start").findFirst('ul')
sollte es alle ul Listen zurück, die ich mit der gültig-Ergebnis Klasse markiert habe, aber nicht die ul mit Klasse not-a-Ergebnis. es ist diese Funktion zu finden, hat die erste Elemente, die übereinstimmen Es mit einem gegebenen Selektor, aber nicht mit den inneren Elementen, die mit diesem Selektor übereinstimmen.
Dies ist das erste Mal, dass ich versuche, eine Jquery-Funktion zu programmieren, und was ich bereits gelesen habe, hilft mir nicht allzu sehr dabei. Die Funktion, die ich entwickelt habe, ist dies:
jQuery.fn.findFirst = function (sel) {
return this.map(function() {
return $(this).children().map(function() {
if ($(this).is(sel)) {
return $(this);
} else {
return $(this).findFirst(sel);
}
});
});
}
Es funktioniert im Sinne versucht es das erwartete Ergebnis zurück, aber das Format es gibt das Ergebnis für mich sehr selten ist. Ich nehme an, das Problem ist etwas, was ich nicht über Jquery verstehe. Hier haben Sie the JFiddle wo ich testen.
EDIT
Das erwartete Ergebnis nach $("#start").findFirst('ul')
ist ein Satz mit allen UL, der die Klasse ‚valid-Ergebnis‘ haben, aber es ist nicht möglich, diese Klasse zu verwenden, da es in einem realen existiert nicht Fall (es ist nur um zu versuchen, das Ergebnis zu erklären).
Dies ist nicht äquivalent zu first(), da zuerst nur ein Element zurückgegeben wird!
Wenn Sie dies als eine Übung in wie geht es zu lernen, zu schreiben ein Plug-in, das ist in Ordnung, aber Sie sollten diese Notiz speziell machen, sonst duplizieren Sie wirklich vorhandene Funktionalität. –
Ich glaube, ich habe es sehr schlecht erklärt .. Bearbeiten ... – Ivan
Ich habe ein paar Beispiele als Antwort - erkunden Sie diese, um ein Verständnis für die Auswahlmöglichkeiten zu bekommen. –