2012-05-08 6 views
1

Я пытаюсь получить стиль/полужирный, курсив и т. Д. Слова под текущей позицией курсора. У меня есть x и y коорд от мыши, и я сделал следующийПолучение стиля слова, окружающего текущую позицию курсора

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

, но это приводит к ошибкам, что диапазон не имеет queryCommandState метода в то время этого чтения: http://help.dottoro.com/ljkxwclp.php означает, что диапазон или по крайней мере текстовый диапазон (Я новичок JS, так простите меня об этом) имеет такой метод. Любая помощь приветствуется.

Edit: я своего рода временное решение, добавив

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

, но я не очень доволен. Есть ли лучший способ достичь этого?

+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); 
} 
Смежные вопросы