2010-12-05 7 views
0

こんにちは、私はいくつかの問題があります:別の段落でjavascriptのコンテキストを囲む選択テキストを取得する方法は?

  1. 私は、選択した単語の周りの言葉をいただく場合がございます前に、選択されたワード与えられた限度選択した単語を囲むだけで20の言葉の後に単語?段落内の単語が同じ単語を持っている場合は、正しい位置を取得する方法を
  2. 、例えば私はこのような文があります。その後、私は言葉を選ぶその位置の間にある「foo」というFOO LAA fooの斗を言葉LAA
  3. はどのように異なる段落から単語を取得しますか?例えば



    P1:私は赤いシャツに
    P2が好き:私の母は赤いシャツを好きではなかった


    私が選択した単語は、「母」で、私が持っています単語の周りの10個の言葉「母」で取るために「私は赤いシャツが好きではありません。」「私は赤いドレスが好き」と

ノート: 質問2号がnextSiblingとのpreviousSiblingを使用することができますか?

これは私がしようと私のコードです:

<html> 
<head> 
<script type="text/javascript"> 
function getElements(){ 
    var x = document.getElementsByTagName("body"); 
    x = x[0].innerHTML; 

    x = x.replace(/&(lt|gt);/g, function (strMatch, p1){ 
      return (p1 == "lt")? "<" : ">";}); 
    var str = x.replace(/<\/?[^>]+(>|$)/g, ""); 



    var emailPattern = /[_a-zA-Z0-9\.][email protected][\.a-zA-Z0-9]+\.[a-zA-Z]+/gi; 
    var urlPattern = /[a-z]+:\/\/[^\s]+/gi; 
    var numberOrSymbolPattern = /[0-9\.,[email protected]#\$%\^\&*\(\)`~_\-=\+|\\{}\[\]\s:;<>\?\/]+/gi; 

    //////alert(str); 

    var str = str.replace(emailPattern , " "); 
    var str = str.replace(urlPattern , " "); 
    var str = str.replace(numberOrSymbolPattern , " "); 
    //////alert(str); 
    var str = str.replace(/[\n\f\r\t]/g, " "); 

    var hilangtandabaca = str.replace(/[.!:;'",?]/g," "); 

    var kataptg = hilangtandabaca; 
    //alert(kataptg); 
    var kata = new Array(); 
    kata[0] = " is "; 
    kata[1] = " the "; 
    kata[3] = " of "; 
    kata[4] = " a "; 
    kata[5] = " or "; 
    kata[6] = " for "; 
    kata[7] = " from "; 
    kata[8] = " in "; 
    kata[9] = " this "; 
    kata[10] = " and "; 
    kata[11] = " on "; 
    kata[12] = " with "; 
    kata[13] = " my "; 

for(var i=0,regex; i<kata.length; i++){ 
     var regex = new RegExp(kata[i],"gi"); 
     kataptg = kataptg.replace(regex," "); 
    } 

    var select = getSelected()+ ""; 
    alert(select); 
    var index = kataptg.indexOf(select); 
    //alert("indeks select text:" + index); 
    if (index >= 0) { 
    var strBefore = ""; 
    var strAfter = ""; 
    //var strOri =""; 
    //if (index = -1) 
    //strOri = kataptg.substr(index); 
    //alert(strOri); 
    if (index > 0) 
    strBefore = kataptg.substr(0, index); 
    //alert(strBefore); 
    if (index < kataptg.length - 1) 
    strAfter = kataptg.substr(index + select.length, kataptg.length - (index + select.length)); 
    //alert(strAfter); 
    alert("Before: " + strBefore + "\nAfter: " + strAfter); 
    } 

} 


function getSelected() { 
    var userSelection; 
    if (window.getSelection) { 
     userSelection = window.getSelection(); 
    } else if (document.selection) { 
     userSelection = document.selection.createRange(); 
    } 
    return userSelection; 
} 


</script> 
</head>       
<body> 
<h2>About</h2> 
<p> my email : [email protected] 
<p> my url http://id.wikipedia.org/wiki/URL 
<p> my telepon number = 081330782 
<p>okey In agriculture, the harvest is the process of gathering mature crops from the fields. Reaping is the cutting of grain or pulse for harvest, typically using a scythe, sickle, or reaper.[1] The harvest marks the end of the growing season, or the growing cycle for a particular crop, and this is the focus of seasonal celebrations of on many religions. On smaller farms with minimal mechanization, harvesting is the most labor-intensive activity of the growing season great yeah. !:;'",?</p> 

<p> 
<input type="button" onclick="getElements()" value="ambil select text" /> 
</p> 

</body> 
</html> 
+0

私は(HTTP前に、この非常によく似質問にあなたの賢明な答えを与えてくれました! //stackoverflow.com/questions/4332753/how-to-get-selected-text-but-can-i-get-surrounding-context-in-j avascript/4333439#4333439)、あなたは無視したようです。なぜあなたはそれを無視しましたか?あなたがそれを理解していない場合、あなたはコメントの明確化を求めることができます。 –

答えて

1

これにはJavaScriptのinnerHTMLsplit()方法の完璧な例です。 p要素のすべての内容をループすることができます。ここで最初の段落での検索の例を示します。

​​

split(' ')は、スペースで分離し、配列に要素の内容を分割します。 innerHTMLは自明です。今

、あなたの言葉を見つけます。 indexOf()は、この場合ではあなたの友達です:

foodex = contentArray.indexOf('foo'); 
alert('The first occurrence of the string \'foo\' in the text is at word number ' + foodex); 

最後に、周囲の単語を取得するには、単なる文字列の出現は、段落の開始または終了に近い場合、これは動作しません(配列と遊びます、すなわち、10個の未満の単語の距離:

alert('I am the 10th word after \'foo\'' + contentArray[foodex + 10 - 1]); 

幸運(無保証このコードは、箱から出して動作します)

+0

@ブレンダー:私はこの質問をする前にそれを試しているので、私はあなたと例を与えるかもしれませんが、私のコードを意味するかもしれませんが、助けてくれません.. – user495688

+0

申し訳ありませんが、私はほとんどあなたを理解することができます。それは人々があなたをはっきりと理解するのを助けるので、文法をもっと使う必要があります。あなたの* exact *の質問は何ですか?コードの何が間違っていますか? – Blender

+0

私の文法が悪いと申し訳ありません。:) 私はこのコードを上記のように作成しました。私が選択した単語は実際には別の位置に置かれていますが、確かに結果は同じになるので、インデックスを使用するときは同じ単語の位置を取得するのにまだ苦労しています – user495688

関連する問題