https://jsfiddle.net/MrTK1230/71vuuvo1/
上記のサイトで作業をしています
検索したら対象文字がハイライトされ、別の単語を検索したら今のハイライトを削除して検索対象文字にハイライトを付加するというコードを書きたいのですが、
消えるときときえないときがでてしまいます。
原因がわかりません。わかる方お願いします
HTML
1<form class="form" method="POST" name="form1"><input class="textarea" name="word" type="text" /> 2<input type="submit" value="検索" /></form></div> 3<div class="thread"> 4<div class="high"> 5<ul> 6<li> 7aaa 8</li> 9<li> 10aaa111 11</li> 12</ul>
JavaScript
1jQuery(document).ready(function($) { 2 var $thread = $(".high"); 3 var $form = $(".form:first"); 4 var $input = $(".textarea:first"); 5 var $lis = $thread.find("> ul > li"); 6 7 $form.on("submit", function(e){ 8 var liArr = []; 9 e.preventDefault(); 10 $lis.each(function(){ 11 liArr.push($(this).text().toLowerCase()); 12 $item = $(this); 13 $item.html($item.html().replace(/<span class="highlight">([^<]+)<\/span>/gi, '$1')); 14 }); 15 var searchWord = $.trim($input.val()).toLowerCase(); 16 17 //ひらがなをカタカナでも検索可能 18 searchWordkata = searchWord.replace(/[ぁ-ん]/g, function(s) { 19 return String.fromCharCode(s.charCodeAt(0) + 0x60); 20 }); 21 //カタカナをひらがなでも検索可能 22 searchWordkana = searchWord.replace(/[ァ-ン]/g, function(s) { 23 return String.fromCharCode(s.charCodeAt(0) - 0x60); 24 }); 25 26 if(searchWord.length){ 27 for(var li in liArr){ 28 $item = $lis.eq(li); 29 if( liArr[li].indexOf(searchWordkata) != -1 || liArr[li].indexOf(searchWordkana) != -1){ 30 //カタカナでもひらがなでもヒットするように2つ必要 31 $item.removeClass("is-hidden").html($item.html().replace(new RegExp(searchWordkana+"(?!([^<]+)?>)", "gi"), '<span class="highlight">$&</span>')); 32 $item.removeClass("is-hidden").html($item.html().replace(new RegExp(searchWordkata+"(?!([^<]+)?>)", "gi"), '<span class="highlight">$&</span>')); 33 } 34 } 35 $("html,body").animate({scrollTop:$(".highlight").offset().top}); 36 } 37 }); 38}); 39
CSS
1/* highloght */ 2.thread p{ 3 line-height: 1.6; 4} 5.high .highlight{ 6 background-color: #fffd77; 7}
改善後
JavaScript
1jQuery(document).ready(function($) { 2 var $thread = $(".high"); 3 var $form = $(".form:first"); 4 var $input = $(".textarea:first"); 5 var $lis = $thread.find("> ul > li"); 6 7 $form.on("submit", function(e){ 8 var liArr = []; 9 e.preventDefault(); 10 $lis.each(function(){ 11 liArr.push($(this).text().toLowerCase()); 12 $item = $(this); 13 $item.html($item.html().replace(/<span class="highlight">([^<]+)<\/span>/gi, '$1')); 14 }); 15 var searchWord = $.trim($input.val()).toLowerCase(); 16 17 //ひらがなをカタカナでも検索可能 18 searchWordkata = searchWord.replace(/[ぁ-ん]/g, function(s) { 19 return String.fromCharCode(s.charCodeAt(0) + 0x60); 20 }); 21 //カタカナをひらがなでも検索可能 22 searchWordkana = searchWord.replace(/[ァ-ン]/g, function(s) { 23 return String.fromCharCode(s.charCodeAt(0) - 0x60); 24 }); 25 26 if(searchWord.length){ 27 for(var li in liArr){ 28 $item = $lis.eq(li); 29 if( liArr[li].indexOf(searchWordkata) != -1 || liArr[li].indexOf(searchWordkana) != -1 || liArr[li].indexOf(searchWord) != -1){ 30 //カタカナでもひらがなでもヒットするように2つ必要 31 $item.removeClass("is-hidden").html($item.html().replace(new RegExp(searchWordkana+"(?!([^<]+)?>)", "gi"), '<span class="highlight">$&</span>')); 32 $item.removeClass("is-hidden").html($item.html().replace(new RegExp(searchWordkata+"(?!([^<]+)?>)", "gi"), '<span class="highlight">$&</span>')); 33 $item.removeClass("is-hidden").html($item.html().replace(new RegExp(searchWord+"(?!([^<]+)?>)", "gi"), '<span class="highlight">$&</span>')); 34 } 35 } 36 $("html,body").animate({scrollTop:$(".highlight").offset().top}); 37 } 38 }); 39}); 40</script>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/10 14:20
2016/11/10 18:07