I assume you want to use filter , not find :
var some_element_1 = $(Templates).filter('#some-element-1').html();
You see, find searches in $(Templates) :
Get the children of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.
to find things inside these three <div> , but not the <div> ; filter , on the other hand, performs a search on many elements:
Reduce the set of matched elements to those that match the selector or pass a function test.
When you say var x = $(Templates) , your x looks like this:
[ <div id="..."></div>, <div id="..."></div>, <div id="..."></div> ]
If we look at the descendants of those <div> (i.e. find ), we will not find #some-element-1 , but if we look at the set of matched elements themselves (i.e. filter ), we will find #some-element-1 .
If for some reason you really want to use find , you can wrap another <div> around your templates to make them be descendants of $(Template) :
<div> <div id="some-element-1">1</div> <div id="some-element-2">2</div> <div id="some-element-3">3</div> </div>
I also recommend that you wrap your templates in <script> and not <div> s:
<script type="text/x-template" id="some-element-1">1</script> <script type="text/x-template" id="some-element-2">2</script> <script type="text/x-template" id="some-element-3">3</script>
The browser will treat <script> as opaque black fields (assuming you use the correct type attribute), but it may try to interpret and correct the contents of <div> s. The problem is that your templates may be invalid HTML until you process them and fill them out; if you let the browser get invalid HTML, it might try to fix it, and that could create a big mess for your templates.