Другой результат для встроенного вызова append ()

0

У меня есть таблица вроде этого:

<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()?

  • 0
    Вы поместили эту функцию в конце тега тела?
Теги:
jquery-selectors

3 ответа

1
Лучший ответ

Вы не передаете второй параметр для append. Используйте Function.prototype.apply для вызова метода append с переменным числом arguments. Чтобы иметь возможность цеплять вызовы методов, верните this из метода.

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

JS Bin Demo

  • 0
    Благодарю. Это сработало.
0

вам не нужно передавать оба параметра, т.е. $('#1') и $('#2') в функцию myAppend.

по умолчанию функция принимает первый параметр, то есть $('#1') и добавляет его только.

или вам нужно использовать цикл для каждого элемента, который вы хотите добавить

0

Ну, вы передаете два селектора в параметрах функций, но вы используете их там, вместо этого вы можете попробовать передать его как массив в пользовательской функции myAppend:

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

Демо-скрипт

  • 0
    Это отличает интерфейс myAppend() от append() . Как я четко сказал в вопросе, это не то, что я хочу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню