JQuery-эквивалентный для прототипов вниз ()-функция
-
10-10-2019 - |
Вопрос
Я переношу веб -приложение из прототипа в jQuery, в котором я часто использовал функцию прототипа вниз (). (Выбор первого ребенка данного элемента)
Смотрите на jquery-api одним из способов сделать это:
Прототип: $ ('abc'). Down (); jquery: $ ('abc'). children (). First ();
Тем не менее, поскольку это первым приносит всех детей и применяет фильтр, я сомневаюсь, что это эффективно для этого варианта использования.
Что лучше?
Решение
Вы можете расширить jQuery и добавить down()
функционируйте так:
(function($) {
$.fn.down = function() {
return $(this[0] && this[0].children && this[0].children[0]);
};
})(jQuery);
Таким образом, вам не нужно ничего менять в своем коде.
Вы можете увидеть это вживую Пример JSFiddle.
Также вы можете просмотреть сравнение производительности в Jsperf.
Это показывает это это быстрее чем методы, представленные в других ответах (которые от 40% до 70% медленнее).
РЕДАКТИРОВАТЬ:
Альтернативная версия, адаптированная из фактической реализации прототипа. Это даже быстрее (на 25%)
(function($) {
$.fn.down = function() {
var el = this[0] && this[0].firstChild;
while (el && el.nodeType != 1)
el = el.nextSibling;
return $(el);
};
})(jQuery);
Другие советы
Есть несколько способов сделать это.
Во -первых, это возвращает массив, содержащий одиночный элемент.
$('form').children().first();
Также обратите внимание, что это более читаемая версия$('form').children(":eq(0)")
;
Во -вторых, это возвращает только элемент, извлеченный из массива
$('form').children()[0];
Или если вы знаете, какой тип элемента ваш после (а не просто первого ребенка независимо от типа элемента), вы можете использовать:
$('form').find("input:first");
Наконец, если вам не нужен элемент по сравнению с его родителем, вы можете просто получить доступ к нему напрямую, используя селектор CSS3:
$("input:first");
Я подозреваю, что этот последний вариант является наиболее эффективным, если вы можете сойти с рук. Но если кто -то может сказать больше об эффективности, я бы хотел это услышать.
пытаться:
$('abc').children(":eq(0)")