2016-04-28 4 views
3
window.addEventListener("keydown", function(e){ 
/* 
keyCode: 8 
keyIdentifier: "U+0008" 
*/ 
if(e.keyCode === 16 && getSelectionText() != "") { 
    e.preventDefault(); 
     replaceSelectedText(strcon(getSelectionText())); 
    } 
}); 

function getSelectionText() { 
    var text = ""; 
    if (window.getSelection) { 
     text = window.getSelection().toString(); 
    } else if (document.selection && document.selection.type != "Control") { 
     text = document.selection.createRange().text; 
    } 
    return text; 
} 

function strcon(givenString) { 
    var b = ''; 
    var a = givenString; 
    for (i = 0; i < a.length; i++) { 
     if (a.charCodeAt(i) >= 65 && a.charCodeAt(i) <= 90) { 
      b = b + a.charAt(i).toLowerCase(); 
     } 
     else 
      b = b + a.charAt(i).toUpperCase(); 
    } 
    return b; 
} 

function replaceSelectedText(replacementText) { 
    var sel, range; 
    if (window.getSelection) { 
     sel = window.getSelection(); 
     if (sel.rangeCount) { 
      range = sel.getRangeAt(0); 
      range.deleteContents(); 
      range.insertNode(document.createTextNode(replacementText)); 
     } 
    } else if (document.selection && document.selection.createRange) { 
     range = document.selection.createRange(); 
     range.text = replacementText; 
    } 
} 

Код, который у меня есть сейчас, кажется, меняет внешний вид фактического текста, а не меняет его. Например, когда я нахожусь на Facebook, и я нажимаю на определенную клавишу, текст, кажется, изменился, но затем, когда я нажимаю кнопку ввода, текст возвращается к тому, что было раньше.Изменение выбранного текста через javascript

Я считаю, что проблема связана с функцией replaceSelectedText, но я не уверен, как ее исправить.

Любые идеи?

Нет JQuery, пожалуйста.

https://jsfiddle.net/1rvz3696/

+0

пожалуйста, вы можете создать jsfiddle или plunker? – brk

+0

@ user2181397 Выполнено и сделано – Dgameman1

+1

Я не понимаю проблему. Я попробовал ваш jsfiddle: я вошел «hello foobar». Я выбираю слово и нажимаю клавишу Shift. Затем слово появляется перед полем ввода как заглавные буквы. Что это за нежелательное поведение? – owler

ответ

2

Вы должны получить textarea элемент, чтобы заменить значение в нем. Это как ваша replaceSelectedText функция должна выглядеть,

function replaceSelectedText(text) { 
    var txtArea = document.getElementById('myTextArea'); 
    if (txtArea.selectionStart != undefined) { 
    var startPos = txtArea.selectionStart; 
    var endPos = txtArea.selectionEnd; 
    selectedText = txtArea.value.substring(startPos, endPos); 
    txtArea.value = txtArea.value.slice(0, startPos) + text + txtArea.value.slice(endPos); 
    } 
} 

И вот Fiddle.

Без специального id вы можете заменить txtArea на это.

var txtArea = document.activeElement; 

И еще Fiddle

+0

Но что, если нет конкретного идентификатора, я хочу, чтобы он использовался в любом месте, где человек может поместить текст – Dgameman1

+0

@ ILovephp123 Проверить обновленный ответ – choz

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