3

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

window.getSelection 

给我突出显示的单词。我一直在搜索 javascript 范围的示例,但仍然不完全了解如何通过向后移动选择来循环直到找到标点符号,然后再向前移动直到找到标点符号。

例子:

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

如果我在上面选择了“Facebook”这个词,我的最后一个字符串应该是“Obsessive people are essential to like Facebook and Twitter”。


更新1:

下面提到的代码有效,但如果有 html 标签,则停止。

例子:

如果你深入研究商务部的报告,你会发现一些更令人失望的数字。撇开存货的生产——公司为了以后出售而增加库存的商品——经济在本季度仅增长了 1.6%。资本投资本应在复苏的这一点飙升,但几乎没有增加。个人可支配收入——人们在纳税后必须花费的金额——仅增长了 0.4%。

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

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

4

2 回答 2

2

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

于 2012-04-28T12:51:55.630 回答
1

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

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

于 2012-04-29T17:40:01.893 回答