$(document).ready(function() { // add the search form and bind the events $('h1').after([ '

Filter entries by content:', '', '

' ].join('\n')); function dofilter() { try { var query = new RegExp($('#searchbox').val(), 'i'); } catch (e) { return; // not a valid regex (yet) } // find headers for the versions (What's new in Python X.Y.Z?) $('#changelog h2').each(function(index1, h2) { var h2_parent = $(h2).parent(); var sections_found = 0; // find headers for the sections (Core, Library, etc.) h2_parent.find('h3').each(function(index2, h3) { var h3_parent = $(h3).parent(); var entries_found = 0; // find all the entries h3_parent.find('li').each(function(index3, li) { var li = $(li); // check if the query matches the entry if (query.test(li.text())) { li.show(); entries_found++; } else { li.hide(); } }); // if there are entries, show the section, otherwise hide it if (entries_found > 0) { h3_parent.show(); sections_found++; } else { h3_parent.hide(); } }); if (sections_found > 0) h2_parent.show(); else h2_parent.hide(); }); } $('#searchbox').keyup(dofilter); $('#searchbox-submit').click(dofilter); });