2010-08-26 20 views
26

Estoy dentro de una función y necesito devolver un objeto jQuery con dos elementos. Dentro de la función que tengo, por ejemplo:Cómo unir dos objetos de elemento jQuery? .add() no funciona

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

Y fuera tengo:

$myContainer.append(getInput()); 

El resultado esperado sería:

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

Pero lo único que consigue en este momento con .add() es solo el elemento de entrada y no el de selección. ¿Cómo puedo unir esos dos elementos de formulario en el retorno de la función? Si no es posible con jQuery, entonces con JavaScript simple. Muchas gracias.

Respuesta

43

add() crea (y devuelve) un nuevo objeto jQuery que es la unión del conjunto original y lo que está agregando a él, pero todavía está devolviendo el original en su función. Parece que han querido hacer esto en su lugar:

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

Oh mi, eso está en los documentos. No había leído bien. ¡Muchas gracias! –

+0

La documentación de Jquery dice que el orden de clasificación no está definido en este caso. –

+1

en resumen, decimos que '.add()' es * no destructivo * – chharvey

5

Puede utilizar

$hiddenInput.after($select); 

que pondrá el $select después de la $hiddenInput, lograr lo que se quiere conseguir.

+1

contrario podría utilizar: '$ select.insertAfter ($ HiddenInput);' – js1568

+0

que no lo hicieron funcionó bien. Solo obtengo el elemento de entrada sin seleccionar, como con add(). –

+2

Puede ser que ninguno de los elementos esté en el DOM todavía? –

2

Usted puede usar la siguiente:

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