私はページ用の単純なJavaScriptサーチャーを作成しましたが、不一致/誤った一致、および潜在的に不十分なcssクラスの一致に関するいくつかの問題が発生しています。
最初の例の「コード」(1つの要素にフィルターされます)をクリックしてから「スタイリング」リンクをクリックすると、「コード」のハイライトが残ります。言うまでもなく、これは望ましくありません。
コードのフィルタリング部分で問題が発生すると思いますが、すべて私には非常によく見えます。特に、タイトルのHTMLではなくタイトルのテキストを取得してから、新しいスパンを追加しているためです。
function filter(searchTerm) {
var searchPattern = new RegExp('(' + searchTerm + ')', 'ig'); // The brackets add a capture group
entries.fadeOut(150, function () {
noResults.hide();
$('header', this).each(function () {
$(this).parent().hide();
// Clear results of previous search
$('li', this).removeClass('searchMatchTag');
// Check the title
$('h1', this).each(function () {
var textToCheck = $('a', this).text();
if (textToCheck.match(searchPattern)) {
textToCheck = textToCheck.replace(searchPattern, '<span class="searchMatchTitle">$1</span>'); //capture group ($1) used so that the replacement matches the case and you don't get weird capitolisations
$('a', this).html(textToCheck);
$(this).closest('.workshopentry').show();
}
});
// Check the tags
$('li', this).each(function () {
if ($(this).text().match(searchPattern)) {
$(this).addClass('searchMatchTag');
$(this).closest('.workshopentry').show();
}
});
});
if ($('.workshopentry[style*="block"]').length === 0) {
noResults.show();
}
entries.fadeIn(150);
});
}
他のいくつかの組み合わせはこれを実現しますが、他のいくつかの組み合わせは実現しないため、この特定の問題の原因を突き止めるのは非常に困難です。