2016-10-28 5 views
0

Ich möchte das Wort nach @ abhängig von der aktuellen Schreibposition eines textarea bekommen. Genauer gesagt:Error Auftreten zwischen @ und textarea aktuelle Position

  • wenn die aktuelle Cursorposition auf jedem Brief von @<user> ist, sollte die Antwort <user>

  • wenn die aktuelle Cursorposition auf einem anderen Wort sein, sollte die Antwort leer seine ''

Ich kämpfe mit diesem, aber finde keine "nette" Art, es zu tun.

$('#hey').on('click', function() { alert(); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
 

 
<textarea id="chat">hello @user it's me this is a long text, here is another @username cheers!</textarea> 
 
<span id="hey">CLICK ME</span>

+0

https://www.google.com/ Suche? q = Javascript% 20get% 20word% 20at% 20cursor – mplungjan

+0

@mplungjan das ist precisel y mit dem, was ich gekämpft habe und versuchen zu ändern, gibt es nicht einen ganz anderen Weg? – Basj

+0

Testen Sie einfach, ob das Wort @ enthält oder nicht. Und warum erzählst du uns nicht den Code, den du bereits ausprobiert hast? – mplungjan

Antwort

2

den Code aus den angenommenen doppelten Get current word on caret position aktualisiert hat, wird das Ergebnis wie folgt

function getCaretPosition(ctrl) { 
 
    var start, end; 
 
    if (ctrl.setSelectionRange) { 
 
     start = ctrl.selectionStart; 
 
     end = ctrl.selectionEnd; 
 
    } else if (document.selection && document.selection.createRange) { 
 
     var range = document.selection.createRange(); 
 
     start = 0 - range.duplicate().moveStart('character', -100000); 
 
     end = start + range.text.length; 
 
    } 
 
    return { 
 
     start: start, 
 
     end: end 
 
    } 
 
} 
 

 
$("textarea").on("click keyup", function() { 
 
    var caret = getCaretPosition(this); 
 
    var endPos = this.value.indexOf(' ',caret.end); 
 
    if (endPos ==-1) endPos = this.value.length; 
 
    var result = /\S+$/.exec(this.value.slice(0, endPos)); 
 
    var lastWord = result ? result[0] : null; 
 
    if (lastWord) lastWord = lastWord.replace(/['";:,.\/?\\-]$/, ''); // remove punctuation 
 
    $("#atID").html((lastWord && lastWord.indexOf("@") == 0)?lastWord:""); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<textarea>Follow me on twitter @mplungjan if you want</textarea><br/> 
 
<span id="atID"></span>

Verwandte Themen