JavaScript扫描所选单词前后的单词

3
我正在尝试使用JavaScript生成突出显示单词的完整句子。
window.getSelection 

请给我突出显示的单词。我一直在寻找JavaScript范围的示例,但仍然不完全理解如何通过向后移动选择并找到标点符号,然后向前移动来循环。
例如:
社交媒体与神经症的关系紧张。像Facebook和Twitter这样的网站需要着迷的人。他们增加了能量和兴奋。他们的身份与他们的头像联系在一起,这本身就使得这些网站显得重要。他们提供了大部分内容。去年秋天发表的一项研究报告称,在Twitter上有两万名用户提供了其中一半的阅读量。但是着迷者也很危险。他们可以让网站看起来很吓人。
如果我在上面选择了单词“Facebook”,那么我的最终字符串应为“像Facebook和Twitter这样的网站需要着迷的人。”
更新1:
下面提到的代码有效,但如果存在HTML标记,则会停止。
例如:
如果您深入研究商务部报告,您可以找到一些更令人失望的数字。抛开库存生产 - 公司为了以后出售而添加到其库存中的商品 - 经济仅增长了1.6%。资本投资在复苏这一点上应该激增,但几乎没有增长。而个人可支配收入 - 支付税后人们可以支配的金额 - 仅增加了0.4%。
通过选择上面的“find”,输出句子为“您可以找到一些更令人失望的数字”,而不是“如果您深入研究商务部报告,您可以找到一些更令人失望的数字”。
如何在匹配之前和之后删除标记?
2个回答

2

window.getSelection 返回一个 Selection 对象,从中您可以获取一个 Range,而这个 Range 又提供了起始和结束偏移量。其余的很明显:

rng = window.getSelection().getRangeAt(0)
start = rng.startOffset
end = rng.endOffset
text = rng.startContainer.nodeValue

before = text.substr(0, start)
sel = text.substr(start, end - start)
after = text.substr(end)

sentence = before.match(/[^.!?]*$/)[0] +  sel + after.match(/^[^.!?]*/)[0]

这在火狐和谷歌浏览器中可以正常工作,如果我没记错的话,在IE浏览器中看起来会有所不同。欲了解更多信息,请参见http://msdn.microsoft.com/en-us/library/ie/ms535869%28v=vs.85%29.aspx


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接