Я пытаюсь создать плагин Jquery (findFirst()
), чтобы найти первого потомка с заданными характеристиками (что-то посередине функций find()
и children()
. Например, с учетом этой разметки:
<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>
Если вы запросите $("#start").findFirst('ul')
, он должен вернуть все ul списки, которые я пометил классом valid-result , но не ul с класс не-результат . То есть эта функция должна найти первые элементы, которые соответствуют данному селектору, но не внутренние элементы, которые соответствуют этому селектору.
Это первый раз, когда я пытаюсь кодировать функцию Jquery, и то, что я уже прочитал, не слишком помогает мне в этом. Я разработал следующую функцию:
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);
}
});
});
}
Он работает в том смысле, что пытается вернуть ожидаемый результат, но формат, в котором он возвращает результат, очень редок для меня. Полагаю, проблема в том, чего я не понимаю в Jquery. Здесь у вас есть JFiddle , где я тестирую.
EDIT
Ожидаемый результат после $("#start").findFirst('ul')
равен набором со всеми UL, имеющими класс 'valid-result', НО невозможно использовать этот класс, потому что он не существует в реальном случае ( это просто попытка объяснить результат).
Это не эквивалентно first (), потому что first возвращает только один элемент!