diff --git a/select2.js b/select2.js index 1a367aea..bd86cbcb 100755 --- a/select2.js +++ b/select2.js @@ -354,14 +354,29 @@ } return function (query) { - var t = query.term, filtered = {}; + var t = query.term, filtered = { results: [] }, process; if (t === "") { query.callback({results: data}); return; } - filtered.results = $(data) - .filter(function () {return query.matcher(t, text(this));}) - .get(); + + process = function(datum, collection) { + var group; + datum = datum[0]; + if (datum.children) { + group = { text: text(datum), children: [] }; + $(datum.children).each2(function(i, childDatum) { process(childDatum, group.children); }); + if (group.children.length) { + collection.push(group); + } + } else { + if (query.matcher(t, text(datum))) { + collection.push(datum); + } + } + }; + + $(data).each2(function(i, datum) { process(datum, filtered.results); }); query.callback(filtered); }; }