jQueryを使って検索したテキストを選択して返したい。
問題は; テキストの一部が<span>
または他のインライン要素にある可能性があるため'waffles are tasty'
、このテキストで検索する'I'm not sure about <i>cabbages</i>, but <b>waffles</b> <span>are</span> <i>tasty</i>, indeed.'
と、一致するものは何も得られませんが、テキストは途切れることなく表示されます。
この HTML を例として使用してみましょう。
<div id="parent">
<span style="font-size: 1.2em">
I
</span>
like turtles
<span>
quite a
</span>
lot, actually.
<span>
there's loads of
</span>
tortoises over there, OMG
<div id="child">
<span style="font-size: 1.2em">
I
</span>
like turtles
<span>
quite a
</span>
lot, actually.
TURTLES!
</div>
</div>
この (または同様の) JavaScript を使用すると:
$('div#parent').selectText({query: ['i like', 'turtles', 'loads of tortoises'], caseinsensitive: true}).each(function () {
$(this).css('background-color', '#ffff00');
});
//The (hypothetical) SelectText function would return an array of wrapped elements to chain .each(); on them
この出力を生成したいでしょう:(明らかにコメントなしで)
<div id="parent">
<span style="font-size: 1.2em">
<span class="selected" style="background-color: #ffff00">
I
</span> <!--Wrap in 2 separate selection spans so the original hierarchy is disturbed less (as opposed to wrapping 'I' and 'like' in a single selection span)-->
</span>
<span class="selected" style="background-color: #ffff00">
like
</span>
<span class="selected" style="background-color: #ffff00"> <!--Simple match, because the search query is just the word 'turtles'-->
turtles
</span>
<span>
quite a
</span>
lot, actually.
<span>
there's
<span class="selected" style="background-color: #ffff00">
loads of
</span> <!--Selection span needs to be closed here because of HTML tag order-->
</span>
<span class="selected" style="background-color: #ffff00"> <!--Capture the rest of the found text with a second selection span-->
tortoises
</span>
over there, OMG
<div id="child"> <!--This element's children are not searched because it's not a span-->
<span style="font-size: 1.2em">
I
</span>
like turtles
<span>
quite a
</span>
lot, actually.
TURTLES!
</div>
</div>
(架空の)関数は、検索の一部が 、 '' などの他のインライン要素にあるかどうかに関係なく、SelectText
選択されたすべてのテキストをタグでラップします。子のコンテンツはインライン要素ではないため、検索しません。<span class="selected">
<span>
<div>
このようなことを行うjQueryプラグインはありますか? (検索クエリを span タグでラップして返します。見つかったテキストの一部が他のインライン要素に配置されている可能性があるかどうかを忘れていますか?)
そうでない場合、そのような関数を作成するにはどうすればよいでしょうか? この関数は私が探しているものですが、見つかったテキストの一部が他のインライン要素にネストされている場合、選択されたスパンとブレークの配列を返しません。
どんな助けでも大歓迎です!