2016-04-25 17 views
0

У меня есть текст в div selectable, и я хочу разрешить пользователю удалять текст, выбирая текст, используя их курсор.Удалить выделенный/выделенный текст

Он отлично работает, но если вы нажмете на текст, все будет удалено. Если вы нажмете и перетащите, чтобы выбрать, он отлично работает.

Что я могу сделать, чтобы оно правильно работало с моим текстом. Если пользователь нажимает на текст, он не должен удалять все.

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

Это похоже на ваше другое утверждение вызывает это поведение. Когда текст не выбран, он захватывает весь текст, а затем устанавливает текст1 в пустую строку. Затем ваша последняя строка кода устанавливает текст в div в text1. – spaceman

ответ

1

Ваша ошибка лежит на else части. Если пользователь не выбрал какой-либо текст, то есть просто щелчок по тексту, ваш блок кода else будет выполнен.

В этом блоке вы назначаете var text1 = "";

Позже вы Ассинг text1 как текстовое содержимое вашего $(".selectable") элемента.

Просто измените эту линию:

var text1 = selectedText; 

Посмотреть обновленный fiddle

Я также предлагаю вам объявить var text1 только один раз в верхней части вашего обработчика MouseUp и изменить свои задания от var text1 = "value" к text1 = "value"

var hoisting

+0

Или просто избавиться от инструкции else и переместить последнюю строку внутри оператора if. Заявление else действительно не требуется. – spaceman

+0

Не могли бы вы отредактировать jsFiddle с помощью своего решения https://jsfiddle.net/5Lkbmawq/, в частности, той части, где я должен переместить переменную hte на верх, поскольку я не уверен, что вы имеете в виду. Благодарю. –

+1

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

Смежные вопросы