获取围绕当前光标位置的单词样式

时间:2012-05-08 14:36:46

标签: javascript word selection range styling

我正在尝试在当前光标位置下获取单词的样式/粗体,斜体等。 我有点击的xy坐标,我已完成以下操作

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

但是这会导致范围没有queryCommandState方法的错误,而这个读数:http://help.dottoro.com/ljkxwclp.php意味着范围或至少文本范围(我是JS新手,所以原谅我)有这样的一个方法。非常感谢任何帮助。

编辑:我通过添加

解决了这个问题
var range = document.caretRangeFromPoint(x,y);
range.expand('word');
window.getSelection().addRange(range);
document.queryCommandState('bold');
window.getSelection().empty();

但我对此并不满意。有没有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

我认为如果不编写大量代码,你可以做得更好。 IE的专有TextRange有一个queryCommandState()和相关的方法,但在其他浏览器中它从未进入Range。

如果您不满意需要销毁选择以进行大胆测试,那么我同意它看起来不必要地复杂和笨重,但将选择恢复到其原始状态很简单。此外,清空选择的基于标准的方法是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);
}