私は、JQueryを使用して静的なHTMLページ内で簡単な検索を試みました。 JQueryを使用するのはこれが初めてであることに言及する必要があります。
私はページで見つかったWordの背景を変更しようとしていますが、これは私がこれまで試したものです:
myJavascript.js:
$(document).ready(function(){
$('#searchfor').keyup(function(){
page = $('#all_text').text();
searchedText = $('#searchfor').val();
$("p:contains('"+searchedText+"')").css("color", "white");
});
});
HTMLコードも次のとおりです。
page.html:
<html>
<head>
<title>Test page</title>
</head>
<body bgcolor="#55c066">
<input type="text" id="searchfor"></input>
<p id="all_text">Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euism modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.
<font color="red">Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tinci futurum.</font>
</p>
</body>
<script src="jquery-1.7.2.min.js"></script>
<script src="myJavascript.js"></script>
</html>
Firebugでページを調べた後、JQueryの変数が入力フィールドから値を取得することがわかりますが、強調表示部分を台無しにしていると思います。
よろしくお願いします!
このようなことをしてください
$("p:contains('"+searchedText+"')").each( function( i, element ) {
var content = $(element).text();
content = content.replace( searchedText, '<span class="search-found">' + searchedText + '</span>' );
element.html( content );
});
.search-found {
text-decoration: underline;
}
追伸これは、各「要素」にプレーンテキストのみのコンテンツがある場合にのみ機能します。そうでない場合、子ノードが削除されます。
編集:each
コールバックの余分な ')'を削除しました
独自の強調表示機能をゼロから作成し始めるのがおそらく悪い考えである理由は、他の人がすでに解決した問題に必ず出くわすからです。課題:
innerHTML
)複雑に聞こえますか?強調表示、発音区別符号マッピング、同義語マッピング、iframe内の検索、分離されたWord検索などからいくつかの要素を無視するような機能が必要な場合、これはますます複雑になります。
既存の適切に実装されたプラグインを使用する場合、上記の名前のものについて心配する必要はありません。 Sitepointの記事10 jQueryテキストハイライトプラグインは、人気のあるハイライトプラグインを比較しています。これには、この質問からの回答のプラグインが含まれます。
mark.js は、純粋なJavaScriptで記述されたプラグインですが、jQueryプラグインとしても利用可能です。以下のオプションを持つ他のプラグインよりも多くの機会を提供するために開発されました。
または、 this fiddle を確認できます。
使用例:
// Highlight "keyword" in the specified context
$(".context").mark("keyword");
// Highlight the custom regular expression in the specified context
$(".context").markRegExp(/Lorem/gmi);
これは無料で、GitHubで開発されたオープンソースです( プロジェクトリファレンス )。
$(function() {
$("input").on("input.highlight", function() {
// Determine specified search term
var searchTerm = $(this).val();
// Highlight search term inside a specific context
$("#context").unmark().mark(searchTerm);
}).trigger("input.highlight").focus();
});
mark {
background: orange;
color: black;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/mark.js/7.0.0/jquery.mark.min.js"></script>
<input type="text" value="test">
<div id="context">
Lorem ipsum dolor test sit amet
</div>
ここに私のものがあります: http://jsfiddle.net/x8rpY/1/
JS:
$('#searchfor').keyup(function(){
var page = $('#all_text');
var pageText = page.text().replace("<span>","").replace("</span>");
var searchedText = $('#searchfor').val();
var theRegEx = new RegExp("("+searchedText+")", "igm");
var newHtml = pageText.replace(theRegEx ,"<span>$1</span>");
page.html(newHtml);
});
CSS:
#all_text span
{
text-decoration:underline;
background-color:yellow;
}
繰り返し検索にも機能します。
$(function() {
$("input").on("input.highlight", function() {
// Determine specified search term
var searchTerm = $(this).val();
// Highlight search term inside a specific context
$("#context").unmark().mark(searchTerm);
}).trigger("input.highlight").focus();
});
mark {
background: orange;
color: black;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/mark.js/7.0.0/jquery.mark.min.js"></script>
<input type="text" value="test">
<div id="context">
Lorem ipsum dolor test sit amet
</div>