2010-08-26 15 views
26

Jestem wewnątrz funkcji i muszę zwrócić obiekt jQuery z dwoma elementami. Wewnątrz funkcji I mają, na przykład:Jak dołączyć dwa obiekty elementów jQuery? .add() nie działa

function getInput() { 
    $hiddenInput = $('<input type="hidden">'); 
    //(other code) 
    $select = $('<select></select>'); 
    //(other code) 
    $hiddenInput.add($select); 
    return $hiddenInput; 
} 

i na zewnątrz mam:

$myContainer.append(getInput()); 

Wynik oczekiwać będzie:

<div id="container"><input type="hidden"><select></select></div> 

Ale jedyne co mogę teraz z .add() jest tylko elementem wejściowym, a nie select. Jak mogę połączyć te dwa elementy formularza w funkcji return? Jeśli nie jest to możliwe z jQuery, to z prostym JavaScript. Wielkie dzięki.

Odpowiedz

43

tworzy (i zwraca) nowy obiekt jQuery, który jest połączeniem oryginalnego zestawu i co dodajesz do niego, ale nadal zwracasz oryginał w swojej funkcji. Wydaje się, że chciał to zrobić w zamian:

function getInput() { 
    $hiddenInput = $('<input type="hidden">'); 
    //(other code) 
    $select = $('<select></select>'); 
    //(other code) 
    return $hiddenInput.add($select); 
} 
+0

O mój, to w dokumentach. Nie czytałem dobrze. Wielkie dzięki! –

+0

Dokumentacja jquery mówi, że kolejność sortowania jest w tym przypadku niezdefiniowana. –

+1

w skrócie, mówimy, że '.add()' jest * nieniszczące * – chharvey

5

Można użyć

$hiddenInput.after($select); 

To będzie umieścić $select po $hiddenInput, osiągnięcia tego, co chcesz uzyskać.

+1

Odwrotnie można użyć: '$ select.insertAfter ($ hiddenInput);' – js1568

+0

które nie pracował albo. Dostaję tylko element wejściowy bez select, tak jak z add(). –

+2

Być może żaden element nie jest jeszcze w DOM? –

2

można użyć następujących:

this.MergejQueryObjects = function(arrayOfJqueryObjects) { 
     return $($.map(arrayOfJqueryObjects, function (el) { 
      return el.get(); 
     })); 
    }