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に組み込まれることはありません。

大胆なテストを行うために選択範囲を破棄する必要があることに不満がある場合は、不必要に複雑で不格好に見えることに同意しますが、選択範囲を元の状態に戻すのは簡単です。また、選択を空にする標準ベースの方法は、WebKit固有のではremoveAllRanges()なくです。empty()

デモ: 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 に答える