2012-11-20 44 views
2

更新:按照下面的建議,具體是我想做什麼:如果我雙擊鼠標光標從「b」到「blue」的「n」綠色「,我希望所有的單詞」藍綠「都應該突出顯示。如何才能做到這一點?目前,根據您點擊的位置,它將「藍綠色」視爲三個單獨的字符串。所以,如果你在「藍色」的「b」和「e」之間雙擊,它只會突出顯示「藍色」而不是「綠色」。如果雙擊連字符,它會單獨突出顯示連字符。如果雙擊「綠色」的「g」和「n」,它只會突出顯示「綠色」而不是「藍色」。原文:當我雙擊一個帶連字符的單詞或一組字符(例如「123-abc」或「藍綠色」等)時,只有雙擊單詞的部分被突出顯示。我希望整個單詞能夠突出顯示。雙擊連字符

我正在使用Windows 7 Pro。如果需要在每個應用程序的基礎上完成,我最感興趣的是修復Google Chrome瀏覽器,但任何Windows兼容的Web瀏覽器都可以。

回答

0

這是所有程序的一個標準,它會這樣做,因爲它們全部運行在操作系統的打字配置/程序上。要解決它,你需要在System32中做一些事情。我不知道你需要做什麼,但我懷疑這是你的問題。你應該更詳細地介紹一下你想要什麼。

1

老問題,但我碰巧一直在研究同一個問題。這裏是我的解決方案:

jsFiddle.net

"use strict" 

// Tweak to make a double-click select words with hyphens 
// 
// As of 2016-0816, None of the major Mac browser selects whole words 
// with hyphens, like "ad-lib". This tweak fixes the hypen issue. 
// 
// Note: Firefox 48.0 doesn't automatically select whole words with 
// apostrophes like "doesn't". This tweak also treats that. 

;(function selectWholeWordsWithHyphens(){ 
    var pOutput = document.getElementById("output") 
    var selection = window.getSelection() 
    // Regex designed to find a word+hyphen before the selected word. 
    // Example: ad-|lib| 
    // It finds the last chunk with no non-word characters (except for 
    // ' and -) before the first selected character. 
    var startRegex = /(\w+'?-?)+-$/g 
    // Regex designed to find a hyphen+word after the selected word. 
    // Example: |ad|-lib 
    var endRegex = /^-('?-?\w+)+/ 
    // Edge case: check if the selection contains no word 
    // characters. If so, then don't do anything to extend it. 
    var edgeRegex = /\w/ 

    document.body.ondblclick = selectHyphenatedWords 

    function selectHyphenatedWords(event) { 
    if (!selection.rangeCount) { 
     return 
    } 
    var range = selection.getRangeAt(0) 
    var container = range.startContainer 
    var string = container.textContent 
    var selectionUpdated = false 

    if (string.substring(range.startOffset, range.endOffset) 
       .search(edgeRegex) < 0) { 
     // There are no word characters selected 
     return 
    } 

    extendSelectionBackBeforeHypen(string, range.startOffset) 
    extendSelectionForwardAfterHyphen(string, range.endOffset) 

    if (selectionUpdated) { 
     selection.removeAllRanges() 
     selection.addRange(range) 
    } 

    function extendSelectionBackBeforeHypen(string, offset) { 
     var lastIndex = 0 
     var result 
     , index 
     string = string.substring(0, offset) 

     while (result = startRegex.exec(string)) { 
     index = result.index 
     lastIndex = startRegex.lastIndex 
     } 

     if (lastIndex === offset) { 
     range.setStart(container, index) 
     selectionUpdated = true 
     } 
    } 

    function extendSelectionForwardAfterHyphen(string, offset) { 
     if (!offset) { 
     return 
     } 

     string = string.substring(offset) 
     var result = endRegex.exec(string) 

     if (result) { 
     range.setEnd(container, offset + result[0].length) 
     selectionUpdated = true 
     } 
    } 
    } 
})()