Javascript 查找单词在文本中的位置
我正在构建一个JS脚本,我想通过点击它来获得一个单词在文本中的位置。例如: 这是我的段落,我想得到 这篇文章 假设我正在点击第二次出现在本文中的段落。结果应该是12,因为它是第12个单词。我怎么能这么做 到目前为止,我可以双击一个单词并获取它,但我还需要它的位置Javascript 查找单词在文本中的位置,javascript,jquery,Javascript,Jquery,我正在构建一个JS脚本,我想通过点击它来获得一个单词在文本中的位置。例如: 这是我的段落,我想得到 这篇文章 假设我正在点击第二次出现在本文中的段落。结果应该是12,因为它是第12个单词。我怎么能这么做 到目前为止,我可以双击一个单词并获取它,但我还需要它的位置 <script> $(document).ready(function() { var p = $('p'); p.css({ cursor: 'pointer' });
<script> $(document).ready(function() {
var p = $('p');
p.css({ cursor: 'pointer' });
p.dblclick(function(e) {
var range = window.getSelection() || document.getSelection() || document.selection.createRange();
var word = $.trim(range.toString());
if(word != '') {
alert(word);
}
range.collapse();
e.stopPropagation();
});
});</script>
<p>This is my paragraph and I want to get the word paragraph of this text.</p>
$(文档).ready(函数(){
var p=$('p');
p、 css({cursor:'pointer'});
p、 dblclick(函数(e){
var range=window.getSelection()| | document.getSelection()| | document.selection.createRange();
var word=$.trim(range.toString());
如果(字!=''){
警惕(word);
}
range.collapse();
e、 停止传播();
});
});
这是我的段落,我想得到这篇文章的段落这个词
您必须对空格字符进行计数,然后在结果中添加1
示例:这1是2我的3段落4和5我6想要7得到8得到9这段文字的10单词11你可以使用
anchorooffset
获得所选文本(基于索引0)。
检查这把小提琴:
$(文档).ready(函数(){
var p=$('p');
p、 css({
光标:“指针”
});
p、 dblclick(函数(e){
var range=window.getSelection()| | document.getSelection()| | document.selection.createRange();
var word=$.trim(range.toString());
如果(字!=''){
警惕(word);
var temp=范围锚定偏移;
警报(临时);
}
//range.collapse();
e、 停止传播();
});
});代码>
这是我的段落,我想得到这篇文章的段落这个词。
你怎么看
var p=$('#text');
var text=p.html();
//将每个单词包装到自定义标记中,并使用data-i属性作为索引
p、 html(text.split(“”).map(函数(单词,索引){
返回`${word}`
}).加入(“”)
//约束动作
$('w-d')。单击(函数(){
var index=$(this.attr('data-i');
警报(索引)
})
点击我的文字。
您可以使用主播偏移来确定您选择的第一个字符的索引(感谢@tech2017)
在那之后,就要计算这个索引前面有多少个单词了
计算单词的最简单方法是计算空格。我们将在\s+
上拆分以确保
注意:我不知道这在所有浏览器中的效果如何。一定要测试
$(文档).ready(函数(){
var p=$('p');
p、 css({
光标:“指针”
});
p、 dblclick(函数(e){
var range=window.getSelection()| | document.getSelection()| | document.selection.createRange();
var word=$.trim(range.toString());
如果(字!=''){
//数词
var charIdx=范围.anchorOffset;
var countStr=range.anchorNode.textContent.substr(0,charIdx);
var wordNumber=(countStr==“”)1:countStr.trim().split(/\s+/).length+1;
警报(字号);
}
//range.collapse();
e、 停止传播();
});
});代码>
这是我的段落,我想用段落这个词。
这不是通用的解决方案@HakimI不认为这是可能的。最近的类似工作将由以下人员完成。当你点击
时,你会得到整个标签元素,而不是它的内容,所以这是不可能的。这很接近,但不是我想要的,因为它是计算字符而不是单词,所以我不建议在不需要的情况下使用单独的事件处理程序将所有文本拆分为单独的div:)。Kokos你知道如何正确地完成此操作吗?我很好奇。是的,请参见下面!是的,我试过你的解决方案,效果很好,OP应该使用你的解决方案!两个观察结果:1)这个和is都用索引1表示,2)句子末尾的句点有自己的索引15。关注点,有趣的观察结果。取决于OP想要什么,但你可以删除所有非字母数字和非空白字符的预计数。我认为这是最有效的方法。谢谢@Kokos