2012-02-16 16 views
0

に(強調表示)選択された複数の部分文字列の出現のどの見つける必要があるが、例として、以下のものを使用して、テキストの任意のブロックを考える:はJavaScript:指定した文字列

Baseball is a sport. 
A pitcher throws the baseball and the batter hits the baseball. 

私はJavaScriptを使用して、決定する必要があります(jQueryの使用は問題ありません)、ユーザによって選択された3つの「野球」のインスタンスのいずれかです。選択したテキストをスパン内に折り返して配置するコードを用意していますので、この問題を解決するのに役立ちます。

Baseball is a sport. 
A pitcher throws the <span class="selection">baseball</span> and the batter hits the baseball. 

基本的に私が選択した「野球」は発生していることを決定する方法についての解決策を探しています:ユーザーが野球の第二の発生を選択し、HTMLは次のようになりますと仮定すると

#2(ゼロインデックスの場合は1)。

ご協力いただきまして誠にありがとうございます。

+0

はどのようにして、「ユーザーが選択した」という意味でしょうか?だと思うので、私はおそらくこのためdownvoted取得しますか彼らは単語をクリックするか、実際にマウスで強調表示してテキストを選択しますか? –

+0

選択すると、テキスト選択を意味しますか? – sgowd

+0

彼はすでに選択された要素のクラスを持っているので、実際には関係ありません。 – ThiefMaster

答えて

2

Selectionオブジェクトが選択されている正確に何を教えてくれます:

if (range.startContainer.nodeType == 3) { 
    var textPriorToSelection = range.startContainer.data.slice(0, range.startOffset); 
    var priorOccurrences = textPriorToSelection.split(sel.toString()).length - 1; 
    alert("Occurrence " + (priorOccurrences + 1) + " of text '" + sel + "'"); 
} 

var sel = window.getSelection(); 
if (sel.rangeCount) { 
    var range = sel.getRangeAt(0); 
    alert("Selection goes from offset " + range.startOffset + " in " 
     + range.startContainer.nodeValue + " to offset " + range.endOffset 
     + " in " + range.endContainer.nodeValue); 
} 

あなたたとえば、あなたがすべてのあなたのテキストを含む単一のテキスト・ノードを持っていると仮定すると、あなたのような何かができます

ライブデモ:http://jsfiddle.net/kGE7e/

+0

Tim、私はこのプロジェクトで私を助けるためにRangyを使っているので、あなたが最初に答えたのはどういう偶然だったのですか? :)問題は、複数の部分文字列のうちどれが選択されているかを調べる必要があることです。したがって、上記の例では、「野球」の2番目のインスタンスが選択されているため、「2」の応答が必要です。 –

+0

@DavidLink:そうです。私の要点は、選択が文書のどの部分が選択されたかを明白に示していることです。私は例で私の答えを更新しました。 –

+0

私は今参照してください。あなたはスマートな男です、ティム。 –

0

スパンで単語をラッピングした後、JQueryを使用してこのようにすることができます

<div id="parent"> 
<span>Baseball</span> is a sport. 
A pitcher throws the <span>baseball</span> and the batter hits the <span>baseball</span>. 
</div> 
<script> 
    $("#parent span").click(function() { 
     var index = $("#parent span").index(this); 
     alert(index); 
     //add class? 
     $(this).addClass("selection"); 
    }); 
</script> 
+0

これは私が必要とするものではありませんが、それは私に考えを与えました。 –

+0

クラスを追加するには、$(this).addClass( "selection");を使用できます。 – Ixx

0

私はHTMLを解析するために正規表現を使用していますが、私はそれが何をしたい

var matches = "Baseball is a sport. A pitcher throws the <span class='selection'>baseball</span> and the batter hits the baseball.".match(/<span.*?>baseball<\/span>|baseball/gi); 
for(i=0;i<matches.length;i++) 
    if(matches[i].indexOf('selection')!=-1) 
     console.log(i+'th index of baseball is selected'); 
関連する問題