У меня есть таблица вроде этого:
<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()
?
Вы не передаете второй параметр для append
. Используйте Function.prototype.apply
для вызова метода append
с переменным числом arguments
. Чтобы иметь возможность цеплять вызовы методов, верните this
из метода.
$.fn.myAppend = function() {
return this.append.apply(this, arguments);
}
вам не нужно передавать оба параметра, т.е. $('#1')
и $('#2')
в функцию myAppend
.
по умолчанию функция принимает первый параметр, то есть $('#1')
и добавляет его только.
или вам нужно использовать цикл для каждого элемента, который вы хотите добавить
Ну, вы передаете два селектора в параметрах функций, но вы используете их там, вместо этого вы можете попробовать передать его как массив в пользовательской функции myAppend
:
$('#foo').myAppend([$('#1'),$('#2')]);
myAppend()
от append()
. Как я четко сказал в вопросе, это не то, что я хочу.