0

ユーザーの選択 (強調表示されたテキスト) をループし、テキストの方向を trl または ltr から変更する必要がある JavaScript について質問があります。ここで私がしたこと:

this._execCom("FormatBlock",'<div>');
var node = null;
if (this.area.contentWindow.getSelection) {
    node = this.area.contentWindow.getSelection().anchorNode.parentNode;

}
else if (this.area.contentWindow.document.selection) {
    var range = this.area.contentWindow.document.selection.createRange();
    if (range) {
        node = range.parentElement();
    }
    var walker=this.area.contentWindow.document.createTreeWalker(node, NodeFilter.SHOW_ELEMENT, null, false);
    while (walker.nextNode())
    {
        x=walker.currentNode.tagName;
        if( x == 'DIV')
            walker.currentNode.style.direction="ltr";
    }

これにより、強調表示されたテキスト内にあるかどうかにかかわらず、すべての div の方向が変更され、ユーザーの選択のみで変更を行う必要があります。

助けてください。

どうもありがとう

4

1 に答える 1

0

編集:あなたの質問を誤解しました。したがって、ユーザーがクリックしてドラッグして、ltr と rtl の間で「方向」を切り替える必要がある要素を選択できるようにするだけです。選択範囲を使用する代わりの方法がありますが、このソリューションで使用するのは非常に困難です。

ここでは、jQuery を使用して「mousemove」イベントをリッスンし、マウスの左ボタンが押されているかどうかを確認します。もしそうなら、方向CSS属性を切り替えます。また、カスタム データ フラグを使用して、マウスをドラッグしたときに要素がちらつくのを防ぎます。

段落が選択されないようにするためのビットもありますが、これはあなたの意図である可能性がありますが、私は迷惑だと感じました. テキストを選択できるようにする場合は、その部分をコメントアウト/削除するだけです。

これがフィドルです:http://jsfiddle.net/nbWYK/8/

TL;DNR:

$(document).on("mousemove", 'p', function(e) {
    var $this = $(this);

    if ($this.data('ignore-direction-toggle')) return;

    if (e.which == 1) {
        $this.data('ignore-direction-toggle', true);
        $this.css({
            'direction': ($this.css('direction') == 'ltr' ? 'rtl' : 'ltr')
        });
    }
}).on('mouseleave', 'p', function(e) {
    var $this = $(this);
    if ($this.data('ignore-direction-toggle')) $this.data('ignore-direction-toggle', null);
});
于 2012-05-14T08:12:44.787 に答える