kbirk
kbirk

Reputation: 4022

jQuery find() for parentless set of elements

I'm building a set of jQuery objects using .add():

var $set= $([]);
$set = $set.add('<div id="a"></div>');
$set = $set.add('<div id="b"></div>');
$set = $set.add('<div id="c"></div>');

I need to be able to get specific elements in this set, however, .find() will not work unless the jQuery set has some sort of hierarchical structure.

Here is a jsfiddle illustrating what im talking about: http://jsfiddle.net/3uope6xv/

Is there any way to get a jQuery element in a 'flat' set of jQuery elements?

Upvotes: 1

Views: 79

Answers (2)

Paul Roub
Paul Roub

Reputation: 36458

Use .filter() instead of .find().

var $parentless = $([]);
$parentless = $parentless.add('<div id="a"></div>');
$parentless = $parentless.add('<div id="b"></div>');
$parentless = $parentless.add('<div id="c"></div>');

if ( $parentless.filter('#a').length > 0 ) {
    $('.parentless-box').text('found');
} else {
    $('.parentless-box').text('not found');
}

var $parent = $('<div class="parent"></div>');
$parent.append('<div id="d"></div>');
$parent.append('<div id="e"></div>');
$parent.append('<div id="f"></div>');

if ( $parent.find('#d').length > 0 ) {
    $('.parent-box').text('found');
} else {
    $('.parent-box').text('not found');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="parentless-box"></div>
<div class="parent-box"></div>

Upvotes: 3

adeneo
adeneo

Reputation: 318312

find only finds descendants, for root elements use filter

$set.filter('#a')

To join them, and find both descendants and root elements, you can append the elements to a common parent, but you already know that as that's what you're doing in the Fiddle

Upvotes: 5

Related Questions