これはどうでしょうか?ちょっとハッキーだったけど、Firefoxでテストしたところ、うまくいきました。
function fixRange(range)
{
var rangeString = range.toString();
try
{
while (rangeString[0] != " ")
{
range.setStart(range.startContainer, range.startOffset - 1);
rangeString = range.toString();
}
range.setStart(range.startContainer, range.startOffset + 1);
} catch (e) {}
try
{
while (rangeString[rangeString.length - 1] != " ")
{
range.setEnd(range.endContainer, range.endOffset + 1);
rangeString = range.toString();
}
range.setEnd(range.endContainer, range.endOffset - 1);
} catch (e) {}
return range;
}
使用例(再選択する選択された範囲):たぶん、それはあなたが始められるでしょう
var selection = window.getSelection();
selection.addRange(fixRange(selection.getRangeAt(0)));
これは非常に近いです - 私は変更しなければならなかった二 'while'に'(rangeString [rangeStringこれはほとんどうまくいきますが、何らかの不安定な振る舞いがあります(例:行の終わり近くで一度クリックすると、次のようになります)。その時点より前のすべてを選択してください)。 –
ええ、私はあなたが改行をチェックする必要があると言及するのを忘れていました。たぶんタブも。 Hmm ..今までのところあなたのコードを投稿してください。我々はそれを見ることができます。このコードを実行する前に、折りたたまれた(空の)範囲を確認する必要があるように思えるでしょうか? – InvisibleBacon