jQuery / JS方法链接

时间:2012-03-20 12:18:50

标签: javascript jquery chaining

我在理解链接方面遇到了问题。我有这段代码:

groups.appendTo(this.selectedList.add(this.availableList));

最初,selectedListavailableList都相同,并且包含带有ul个元素的HTML ligroups是具有4个ul元素的另一个li。完成后,this.selectedListthis.availableList都已修改,并包含新的列表项。 这是如何工作的,add究竟在做什么?它不会将可用列表的内容添加到选定列表中。我还以为add返回了一个临时对象?为什么这个代码比以下更好:

groups.appendTo(this.AvailableList);
groups.appendTo(this.selectedList);

感谢。

修改

背景是:

(function($) {
   $.widget("ui.multiselect", {
      options: {...},
      _func: function() {
         ... local 'this':
         groups.appendTo(this.selectedList.add(this.availableList));
      }
   });
})(jQuery);

1 个答案:

答案 0 :(得分:1)

链接的好处在于您不必多次执行选择,从而获得性能。所有jQuery函数(插件也将)返回选择(有些将返回更改的选择),因此您可以在链中添加另一个方法,如:

$('.classIHaveUsedVeryOften').append(foo).hide().addClass('bar');

如果你愿意写:

$(.classIHaveUsedVeryOften).append(foo);
$(.classIHaveUsedVeryOften).hide();
$(.classIHaveUsedVeryOften).addClass('bar');

jQuery必须三次检索所有匹配元素。如果你有大型DOM结构,实际上这可能需要相当长的时间(即不要这样做)。

处理此问题的另一种可能性是事先将您的选择放入变量中:

var $mySelection = $(.classIHaveUsedVeryOften);
$mySelection.append(foo);
$mySelection.hide();
$mySelection.addClass('bar');