我正在尝试在当前光标位置下获取单词的样式/粗体,斜体等。
我有点击的x
和y
坐标,我已完成以下操作
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();
但我对此并不满意。有没有更好的方法来实现这一目标?
答案 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);
}