2012-05-08 84 views
1

我試圖在當前光標位置下獲取單詞的樣式/粗體,斜體等。 我有點擊的xy座標,我已經做了以下獲取圍繞當前光標位置的單詞的樣式

var range = document.caretRangeFromPoint(x, y); 
range.expand('word'); 
range.queryCommandState('bold'); 

但是這會導致錯誤的範圍沒有queryCommandState方法,而這種閱讀:http://help.dottoro.com/ljkxwclp.php意味着,範圍或至少文本範圍(我是JS新手,所以原諒我)有這樣的方法。任何幫助是極大的讚賞。

編輯:我還挺加入

​​

解決這個,但我不是很滿意。有沒有更好的方法來實現這一目標?

+0

如果按照頁面上的例子,他們使用'document.queryCommandState( 「大膽」);'。你嘗試過嗎? – Travesty3

+0

是的。但是這隻會在我們有選擇的情況下才起作用,而當用戶在那裏移動光標時沒有任何選擇。 – asenovm

+0

您需要支持哪些瀏覽器? –

回答

1

我不認爲你可以做得比你沒有寫很多代碼更好。 IE的專有TextRange有一個queryCommandState()和相關的方法,但它從來沒有成爲其他瀏覽器中的範圍。

如果您不滿意您需要銷燬選擇以進行大膽的測試,那麼我同意它看起來不必要的複雜和笨重,但將選擇恢復到原始狀態很簡單。而且,基於標準的清空選擇的方式是removeAllRanges()而不是empty(),這是WebKit特定的。

演示:http://jsfiddle.net/GkWTb/1/

代碼:

var range = document.caretRangeFromPoint(x, y); 
var sel = window.getSelection(); 
var selRange; 

// Save initial selection 
if (sel.rangeCount > 0) { 
    selRange = sel.getRangeAt(0); 
} 
range.expand("word"); 
sel.removeAllRanges(); 
sel.addRange(range); 
alert(document.queryCommandState("bold")); 

// Restore original selection 
sel.removeAllRanges(); 
if (selRange) { 
    selRange = sel.addRange(selRange); 
}