【问题标题】:how to get selected text surrounding context in javascript in different paragraph?如何在不同段落的javascript中获取围绕上下文的选定文本?
【发布时间】:2011-05-20 10:23:15
【问题描述】:

您好,我有几个问题:

  1. 如果给定所选单词之前和之后的单词仅限制所选单词周围的 20 个单词,我会在所选单词周围获得什么单词?
  2. 如果段落中的单词有相同的单词,如何获得正确的位置,例如我有一个这样的句子:foo laa foo doo 然后我选择单词“foo " 的位置在 laadoo 之间?
  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\.]+@[\.a-zA-Z0-9]+\.[a-zA-Z]+/gi;
  var urlPattern = /[a-z]+:\/\/[^\s]+/gi;
  var numberOrSymbolPattern = /[0-9\.,!@#\$%\^\&*\(\)`~_\-=\+|\\{}\[\]\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 : a@a.a
<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>

【问题讨论】:

  • 我已经给了你一个与此非常相似的问题的明智答案(stackoverflow.com/questions/4332753/…),你似乎忽略了它。你为什么忽略它?如果您不明白,可以在评论中要求澄清。

标签: javascript paragraph selectedtext


【解决方案1】:

这是 JavaScript 的 innerHTMLsplit() 方法的完美示例。您可以遍历所有p 元素的内容。这是第一段中搜索的示例:

contentArray = document.getElementByTagName('p')[0].innerHTML.split(' ')

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]);

祝你好运(不保证此代码开箱即用)!

【讨论】:

  • @blender:我可以举个例子吗,我的意思是我的代码,因为在我提出这个问题之前我已经尝试过了,但这对我没有帮助..
  • 对不起,我几乎听不懂你。你需要使用更多的语法,因为这有助于人们清楚地理解你(如果这听起来很侮辱,对不起)。您的确切问题是什么?代码有什么问题?
  • 好吧,对不起,如果我的语法不好..:) 我已经按照上面的方法编写了这段代码,早在我提出这个问题之前,我就已经按照你对我的建议进行了尝试。但是在使用索引时我仍然在努力获取同一个单词的位置,因为尽管我选择的单词实际上位于不同的位置,但结果肯定是相同的
  • 你试过indexOf('asd', 5)吗?它寻找第六次出现。我不明白问题是什么。你能明确地告诉我们出了什么问题吗?
  • 对不起,我不明白您所说的 indexOf (asd, 5) 是什么意思,例如,我有一句话“收割是为了收获而切割谷物或豆类,通常使用镰刀、镰刀或收割机.收获标志着生长季节的结束....”,然后我选择“收获”这个词,如果我得到40的索引(例如),那么我应该在“the”和“marks”之间的位置,但是在使用时var index = hilangtandabaca.indexOf (strSelectedText);我得到“收获”的索引在“for”和“通常”之间的位置
猜你喜欢
  • 2010-10-25
  • 2011-05-18
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
  • 2020-07-02
  • 2021-12-30
相关资源
最近更新 更多