如何在不同段落中获取javascript中围绕上下文的选定文本?
嗨,我有几个问题: 如果所选单词前后的单词仅限制所选单词周围的20个单词,那么我可以从所选单词周围得到什么? 如果段落中的单词有相同的单词,如何获得正确的位置,例如我有一个这样的句子:foo-laa-foo-doo然后我选择单词foo,它的位置在单词laa和doo之间? 如何从不同的段落中提取单词 例如: 我喜欢这件红衬衫 我妈妈不喜欢这件红衬衫 我选择的词是母亲,我必须在母亲这个词周围加上10个词,即我喜欢红色的裙子,我不喜欢红色的衬衫 注: 问题2:是否能够使用下一个sibling和上一个sibling 这是我尝试的代码:如何在不同段落中获取javascript中围绕上下文的选定文本?,javascript,paragraph,selectedtext,Javascript,Paragraph,Selectedtext,嗨,我有几个问题: 如果所选单词前后的单词仅限制所选单词周围的20个单词,那么我可以从所选单词周围得到什么? 如果段落中的单词有相同的单词,如何获得正确的位置,例如我有一个这样的句子:foo-laa-foo-doo然后我选择单词foo,它的位置在单词laa和doo之间? 如何从不同的段落中提取单词 例如: 我喜欢这件红衬衫 我妈妈不喜欢这件红衬衫 我选择的词是母亲,我必须在母亲这个词周围加上10个词,即我喜欢红色的裙子,我不喜欢红色的衬衫 注: 问题2:是否能够使用下一个sibling和上一个s
<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>
这是JavaScript的innerHTML和split方法的完美示例。您可以循环浏览所有p元素的内容。以下是第一段中的搜索示例:
contentArray = document.getElementByTagName('p')[0].innerHTML.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:我可以给你举个例子吗?我是说我的代码,因为我在问这个问题之前已经试过了,但它对我没有帮助。对不起,我几乎听不懂你说的话。你需要使用更多的语法,因为这有助于人们清楚地理解你,如果这听起来有侮辱性的话。你的确切问题是什么?代码有什么问题吗?好吧,如果我的语法不好的话,很抱歉…:我已经像上面一样编写了这个代码,在我提出这个问题之前很久,我就按照你的建议尝试过了。但是在使用索引时,我仍然很难找到同一个单词的位置,因为虽然我选择的单词实际上位于不同的位置,但结果肯定是相同的。您是否尝试了索引“asd”,5?它寻找第六次出现。我不明白问题出在哪里。你能明确地告诉我们出了什么问题吗?对不起,我不明白你所说的asd指数是什么意思,5例如,我有一句话,收割是为了收割而切割谷物或脉搏,通常使用镰刀、镰刀或收割器。收割标志着生长季节的结束。。。。,然后我选择单词harvest,它的位置在和之间,例如,我应该得到40的索引,但是当使用var index=hilangtandabaca.indexOf strSelectedText时;我得到了一个介于for和typically之间的收获指数。我给了你一个明智的答案,回答了一个类似的问题,你似乎忽略了这个问题。你为什么忽视它?如果你不明白,你可以在评论中要求澄清。