4

私のアプリケーションでは、範囲を多用する必要があります(https://developer.mozilla.org/en/DOM/range)。特に、ユーザーは頻繁にテキストを強調表示してから操作します。ユーザーが誤って単語の断片を含むテキストを強調表示すると、奇妙な結果が生じることがあります。

範囲を指定して、単語の途中で開始または終了するかどうかを確認し、終了する場合は、開始/終了した単語全体が含まれるように拡張できるようにしたいと思います。の真ん中。

4

2 に答える 2

1

これはどう?ちょっとハックですが、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)));
于 2009-08-24T18:55:46.417 に答える
1

私は範囲で作業していませんが、ハイライトは空白文字の直後に開始し、空白文字の直前で終了する必要があるようです。onmouseup イベントで発生するこのチェックを実行する関数を作成する必要があります。この関数への応答は、単語の末尾にあるべき場所への強調表示の自動修正である必要があります。また、ユーザーが単語の途中をクリックすると、ハイライトが単語の先頭から正しくキャプチャされるように、強調表示の開始時にも機能するようにして、モーション障害のあるインターフェイスを持つユーザーのアクセシビリティを向上させます。また、次の正規表現変数に対して test メソッドを使用して、空白文字が定義されていることを確認する必要があります。

/\s+/
于 2009-08-24T10:08:04.940 に答える