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

时间:2012-04-28 12:34:12

标签: javascript range getselection

我正在尝试生成一个完整的句子,其中一个单词使用javascript突出显示。

window.getSelection 

告诉我突出显示的字词。我一直在搜索javascript范围的例子,但仍然没有完全理解如何通过向后移动选择直到找到标点符号然后转发直到找到标点符号来循环。

示例:

  

社交媒体与神经症有着紧密的关系。强迫症   人们对 Facebook 和Twitter等网站至关重要。他们补充道   能量和嗡嗡声。他们的身份与他们的头像捆绑在一起   这本身就使网站看起来很重要。他们提供了很多   内容。去年秋天发表的一项研究报告称,有两万人   Twitter上的用户提供了那里阅读的一半。但是,痴迷者   也是危险的。它们可以使网站看起来令人毛骨悚然。

如果我选择上面的“Facebook”这个词,我的最后一个字符串应该是“强迫人群对Facebook和Twitter等网站至关重要。”


更新1:

下面提到的代码可以正常工作,但如果有html标签就会停止。

示例:

  

如果您深入研究商务部报告,您可以找到一些更令人失望的事情   数字。撇开库存的生产 - 货物   公司增加了他们的库存,以期出售它们   之后 - 本季度经济增长率仅为1.6%。   资本投资,在这一点上应该飙升   恢复,几乎没有上升。和个人可支配收入 -   纳税后人们不得不花费的金额   只有0.4%。

通过选择上面的“查找”,输出句子是“你可以找到一些更令人失望的数字”而不是“如果你钻研商务部报告,你可以找到一些更令人失望的数字”

如何在匹配之前和之后删除标签?

2 个答案:

答案 0 :(得分:2)

window.getSelection会返回Selection个对象,您可以从中获取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]

这适用于FF和Chrome,IIRC,在MSIE中看起来不同。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ie/ms535869%28v=vs.85%29.aspx

答案 1 :(得分:1)

我正在为我的Rangy库工作,并且非常接近初始版本。这是一个正在进行中的演示:

http://rangy.googlecode.com/svn/trunk/demos/textrange.html