嵌入式append()调用的结果不同

时间:2013-11-11 07:47:10

标签: javascript jquery jquery-selectors

我有一张这样的表:

<table><tbody id="foo">
  <tr id="1"><td>a</td><td>b</td></tr>
  <tr id="2"><td>c</td><td>d</td></tr>
  <tr id="3"><td>e</td><td>f</td></tr>
</tbody></table>

当我应用jQuery操作时:

$('#foo').append($('#1'),$('#2'));

然后我得到以下(预期)结果:

+-+-+
|e|f|
+-+-+
|a|b|
+-+-+
|c|d|
+-+-+

我想将append()函数嵌入到另一个函数myAppend()中,我这样做了:

$.fn.myAppend = function(s){
  this.append(s);
  // something to be, which is irrelevant to this question
};
$('#foo').myAppend($('#1'),$('#2'));

结果与上面不同,我得到了这个(无意识的):

+-+-+
|c|d|
+-+-+
|e|f|
+-+-+
|a|b|
+-+-+

为什么结果不同?如何使myAppend()的工作方式与append()相同?

3 个答案:

答案 0 :(得分:1)

您没有将第二个参数传递给append。使用Function.prototype.apply调用append方法,其变量编号为arguments。为了能够链接方法调用,请从方法中返回this

$.fn.myAppend = function() {
  return this.append.apply(this, arguments);
}

JS Bin Demo

答案 1 :(得分:0)

您不需要将$('#1')$('#2')这两个参数传递给myAppend函数。

默认情况下,函数采用第一个参数,即$('#1')并仅附加它。

或者您需要为要追加的每个项目使用循环

答案 2 :(得分:0)

你在函数参数中传递了两个选择器,但是你在那里使用了一个,所以你可以尝试将它作为一个数组传递给自定义myAppend函数:

$('#foo').myAppend([$('#1'),$('#2')]);

Demo Fiddle