2016-04-25 26 views
0

divにテキストがあり、カーソルを使用してテキストを選択してテキストを削除できるようにします。選択/ハイライトされたテキストを削除

正常に動作しますが、テキストをクリックするとすべてが削除されます。クリックしてドラッグして選択すると、正常に動作します。

テキストを正しく機能させるにはどうすればよいですか。ユーザーがテキストをクリックすると、すべてが削除されるべきではありません。

jsFiddleテスト用です。

のjQuery:

if (window.getSelection().toString() != "") { 
     selectedText = window.getSelection().toString() 
     var text1 = $(".selectable").text().split("") 
     pointStart = window.getSelection().anchorOffset 
     pointEnd = window.getSelection().focusOffset 

     if (pointEnd < pointStart) { 
      pointStart = pointEnd 
     } 
     text1.splice(pointStart, selectedText.length); 
     text1 = text1.join("") 
    } else { 
     selectedText = $(".selectable").text() 
     var text1 = "" 
    } 
$(".selectable").text(text1) 

例HTML:

<div class="selectable"> 
    Hello world what is 進撃の巨人 reality test test... test. 
</div> 

EDIT:潜在的な解決策:

if (window.getSelection().toString() == "") { 
    return false; 
    } 
+0

これはあなたのようですその動作が原因です。テキストが選択されていない場合は、すべてのテキストを取得してtext1を空の文字列に設定します。最後のコード行は、divのテキストをtext1に設定します。 – spaceman

答えて

1

あなたのエラーがelse部分に位置しています。ユーザがテキストを選択していない場合(単にテキストをクリックした場合)、elseコードブロックが実行されます。あなたはその後、あなたの$(".selectable")要素のテキストコンテンツとしてtext1をASSING var text1 = "";

を割り当て、そのブロックで

だけにその行を変更します。

var text1 = selectedText; 

私はまた、あなたのmouseUpハンドラの先頭に一度だけvar text1を宣言し、text1 = "value"

var text1 = "value"からあなたの割り当てを変更示唆更新 fiddle

を参照してください。

参照:var hoisting

+0

または、単にelse文を取り除き、最初のif文の最後の行を移動してください。 else文は本当に必要ではありません。 – spaceman

+0

jsFiddleをあなたのソリューションhttps://jsfiddle.net/5Lkbmawq/で編集してください。特に、あなたが何を意味するのかわからないので、私は上に変数を移動する必要があります。ありがとう。 –

+1

@HenrikPetterson https://jsfiddle.net/5Lkbmawq/5/ –

関連する問題