JQuery相当于原型Down() - 函数

Gee*_*Jan 5 jquery jquery-traversing

我正在将一个webapp从prototype移植到jquery,我常常使用原型Down()函数.(选择给定元素的第一个子元素)

浏览JQuery-api,其中一种方法是:

原型:$('abc').down(); jquery:$('abc').children().first();

但是,由于这首先取出所有孩子并且过滤了一个过滤器,我怀疑它对这个用例是有效的.

什么是更好的方式?

Dan*_*anu 6

您可以扩展jQuery,并添加如下down()函数:

(function($) {
  $.fn.down = function() {
    return $(this[0] && this[0].children && this[0].children[0]);
  };
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

这样您就不必更改代码中的任何内容.

你可以看到这个实时的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);
Run Code Online (Sandbox Code Playgroud)