1

我正在尝试获取当前光标位置下单词的样式/粗体、斜体等/。我有点击的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();

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

4

1 回答 1

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);
}
于 2012-05-10T09:06:00.923 回答