views:

20

answers:

2

Hi all, I'm inside a function and I need to return a jQuery object with two elements. Inside the function I have, for example:

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

And outside I have:

$myContainer.append(getInput());

The result expected would be:

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

But the only thing I get right now with .add() is only the input element and not the select. How can I joint those two form elements on the function return? If not possible with jQuery, then with plain JavaScript. Thanks a lot.

+1  A: 

You can use

$hiddenInput.after($select);

That will put the $select after the $hiddenInput, achieving what you want to get.

Jeff Rupert
Conversely you could use: `$select.insertAfter($hiddenInput);`
js1568
That didn't worked either. I only get the input element without the select, like with add().
Alejandro García Iglesias
It may be that none of the elements is in the DOM yet?
Alejandro García Iglesias
You're still returning `$hiddenInput` afterwards, yes?
Jeff Rupert
Resolved by Tim. Thanks to everyone.
Alejandro García Iglesias
+1  A: 

add() creates (and returns) a new jQuery object that is the union of the original set and what you're adding to it, but you're still returning the original in your function. You seem to have wanted to do this instead:

function getInput() {
    $hiddenInput = $('<input type="hidden">');
    //(other code)
    $select = $('<select></select>');
    //(other code)
    return $hiddenInput.add($select);
}
Tim Stone
Oh my, that's in the docs. I had not read well. Thanks a lot!
Alejandro García Iglesias