2012-09-07 66 views
4

我正在嘗試構建一個工具,允許人們獲取單詞或短語(在選定時),選擇部分已完成,但不是單詞部分。獲取jquery中單擊事件的段落中的當前單詞

我需要能夠獲得當前的字,當有人點擊就一個字,我發現這個解決方案

get word click in paragraphs

不幸的是,這段代碼改變所有的單詞並添加<span>每一個字,因爲我不能在文本中添加html標籤(這可以導入或動態添加CSS文件),這導致了我的問題。

是否有更好的方法來完成此操作?

EX:

Lorem存有悲坐阿梅德,consectetur adipiscing ELIT。 Donec auctor ante sit amet nisl consequat volutpat。

如果我點擊「坐」的話,我會提醒「坐」

+0

是圍繞文本什麼標記你想要點擊? –

+0

你會雙擊(突出顯示文字)嗎?爲努力 – Danny

回答

13

嗯,你的解決方案,您將需要selectionsdoubleclick事件作爲一個棘手的事情工作,並獲得所選擇的字由doubleclick事件生成的範圍。

如果您不想引入新標籤,沒有其他方法。


試試這個:

現場演示:http://jsfiddle.net/oscarj24/5D4d3/

$(document).ready(function() { 

    /* set hand cursor to let know the user that this area is clickable */ 
    var p = $('p'); 
    p.css({ cursor: 'pointer' }); 

    /* doubleclick event working with ranges */ 
    p.dblclick(function(e) { 
     var selection = window.getSelection() || document.getSelection() || document.selection.createRange(); 
     var word = $.trim(selection.toString()); 
     if(word != '') { 
      alert(word); 
     } 
     /* use this if firefox: selection.collapse(selection.anchorNode, selection.anchorOffset); */ 
     selection.collapse(); 
     e.stopPropagation(); 
    }); 

});​ 

希望這有助於:-)

+0

好的.. +1 –

+0

耶的作品,雖然我得到'NS_ERROR_XPC_NOT_ENOUGH_ARGS:沒有足夠的論據[nsISelection.collapse] [打破這個錯誤] \t range.collapse();'錯誤 –

+0

當我刪除'range.collapse();'它工作,我應該刪除它嗎? –

0

Oscar Jara's answer(上圖)說,有沒有其他辦法 [返回點擊詞] 如果你不想引入新的標籤。這可能在2012年是真實的,但現在我們有getSelection

的DocumentOrShadowRoot接口 返回一個選擇對象,表示文本由 選擇的用戶範圍,或當前位置的getSelection()屬性脫字符。

我在Windows Chrome 63.0.3239.84和Windows Firefox 56.0下可以正常工作。爲了與其他的browers測試請使用此jsfiddle example測試

window.getSelection(); 

覆蓋getSelection相關SO問題:

Get a word by single click

Detect which word has been clicked on within a text

Return Sentence That A Clicked Word Appears In