【问题标题】:Javascript to scan words infront of and behind a selected wordJavascript扫描所选单词前后的单词
【发布时间】:2012-04-28 12:34:12
【问题描述】:

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

window.getSelection 

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

示例:

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

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


更新 1:

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

例子:

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

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

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

【问题讨论】:

    标签: javascript range getselection


    【解决方案1】:

    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]
    

    这在 FF 和 Chrome、IIRC 中有效,在 MSIE 中看起来有所不同。请参阅http://msdn.microsoft.com/en-us/library/ie/ms535869%28v=vs.85%29.aspx 了解更多信息。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-27
        • 2014-05-06
        • 1970-01-01
        • 1970-01-01
        • 2022-11-18
        • 2019-04-14
        • 1970-01-01
        相关资源
        最近更新 更多