javascript - 单击段落中的单词后如何获得到目前为止的字数?

标签 javascript jquery html

我这里有这个脚本 -

//Click word, alert position
$(".content").click(function(e){
  s = window.getSelection();
  var range = s.getRangeAt(0);
  var node = s.anchorNode;
  while(range.toString().indexOf(' ') != 0) {                 
    range.setStart(node,(range.startOffset -1));
  }
  range.setStart(node, range.startOffset +1);
  do{
    range.setEnd(node,range.endOffset + 1);

  }while(range.toString().indexOf(' ') == -1 && range.toString().trim() != '');
  var str = range.toString().trim();
  alert(str);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
        
<p class="content">Lorem ipsum dolor sit amet,sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,  At vero eos et accusam et justo duo dolores et ea rebum.  Lorem ipsum dolor sit amet,  no sea takimata sanctus est Lorem ipsum dolor sit amet.  Stet clita kasd gubergren,  no sea takimata sanctus est Lorem ipsum dolor sit amet.  no sea takimata sanctus est Lorem ipsum dolor sit amet.  no sea takimata sanctus est Lorem ipsum dolor sit amet.  sed diam voluptua.</p>

...我知道如何提醒点击的词,但我的目标是点击一个词,让它提醒那个词,以及它在元素中的当前位置。

例如,在这一段中:

<p>Lorem ipsum dolor sit amet,sed diam nonumy eirmod tempor invidunt</p>

我点击“坐”这个词,警报会显示“坐”这个词,从头开始是 4 个词,或者到目前为止是 4 个词,等等。

我似乎无法统计字数。

最佳答案

检查range改变后的startOffset,然后slice元素的textContent到在选择之前获取所有文本。从那里,您可以检查 \w+ (单词字符子字符串)在其中出现的次数,这将是单词的数量:

//Click word, alert position
$(".content").click(function(e) {
  s = window.getSelection();
  var range = s.getRangeAt(0);
  var node = s.anchorNode;
  while (range.toString().indexOf(' ') != 0) {
    range.setStart(node, (range.startOffset - 1));
  }
  range.setStart(node, range.startOffset + 1);
  do {
    range.setEnd(node, range.endOffset + 1);

  } while (range.toString().indexOf(' ') == -1 && range.toString().trim() != '');
  const { startOffset } = range;
  const wordsBeforeStart = this.textContent
    .slice(0, startOffset)
    .match(/\w+/g)
    .length;
  var str = range.toString().trim();
  console.log(str + ' is ' + (wordsBeforeStart + 1) + 'th word after the start');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<p class="content">Lorem ipsum dolor sit amet,sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, At vero eos et accusam et justo duo dolores et ea rebum. Lorem ipsum dolor sit amet, no sea takimata sanctus est Lorem ipsum dolor sit amet. Stet
  clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. no sea takimata sanctus est Lorem ipsum dolor sit amet. no sea takimata sanctus est Lorem ipsum dolor sit amet. sed diam voluptua.</p>

关于javascript - 单击段落中的单词后如何获得到目前为止的字数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53094916/

相关文章:

javascript - 无法在 Angular 4 中遍历 Map

Javascript div 根据位置淡入淡出

javascript - 关于 jquery .text 方法,有什么我应该知道的吗?

javascript - jQuery 文档中的 touchevent 事件函数

javascript - HTML5 WebWorkers,定时功能

javascript - 未捕获的类型错误 : undefined is not a function on loading jquery-min. js

html - 如何使禁用的按钮变灰

html - 谷歌浏览器上的边框。 (CSS) ¿如何删除?

javascript - 将文件转换为基本 64 位 javascript 时出现问题

javascript - CSS 注入(inject)在 content_scripts 中使用声明失败,但在通过注入(inject)的 JavaScript 加载时有效