2016-07-19 19 views
2

Kann mir jemand helfen, wie kann ich hochgestellt auf die Auswahl in meinem Inhalt editierbare div mit Javascript anwenden?Hochgestellt auf die Auswahl mit JavaScript

Ich habe dieses div und eine Schaltfläche:

<div contenteditable="true">Apple Grapes Orange</div> 
<input type="button" onclick="applySuperScript" value="Apply SuperScript"> 

Angenommen, wenn ich den Text „Orange“ von meinem Gehalt editierbare div und klicken Sie auf die Schaltfläche ausgewählt haben, Javascript, sollte Super-Skript aufgerufen werden, um den Text zu übernehmen "Orange".

+0

Ich nehme an, Sie müssen die aktuelle Auswahl erhalten und es in ein * sup * Element wickeln. Sie müssen auch den umgebenden Text aktualisieren, um den ausgewählten Text zu entfernen und ihn in einen oder zwei Textknoten aufzuteilen. Was hast du probiert? Hier gibt es sicherlich schon Antworten darauf. – RobG

+0

PS. Überprüfen Sie die [* selection API *] (https://developer.mozilla.org/en-US/docs/Web/API/Selection) auf MDN. – RobG

Antwort

2

Geringfügige Änderung des HTML.

<div id='text' contenteditable="true">Apple Grapes Orange</div> 
<input type="button" id='super' value="Apply SuperScript"> 

Dies ist unser Click-Handler

document.getElementById('super').onclick = function() { 
var textarea = document.getElementById('text'); 
var anchorOffset = window.getSelection().anchorOffset; 
var focusOffset = window.getSelection().focusOffset; 
var str = textarea.innerHTML.substring(anchorOffset,focusOffset) 
textarea.innerHTML= textarea.innerHTML.replace(str,'<sup>'+str+'</sup>'); 
}; 

Hier ist die fiddle.

+0

Wow! Krishna, deine Lösung funktioniert perfekt außer dem folgenden Szenario. Angenommen, ich habe div-Inhalt wie folgt: Wenn ich "Orange" von der letzten, ersten Orange Text zeigt hochgestellt –

+1

Wählen Sie diese @ShrinathShetty. 'var str = textarea.innerHTML; textarea.innerHTML = strstring (0, ankerOffset) + '' + strstring (ankerOffset, focusOffset) + '' + strstring (focusOffset); ' –

+0

Perfekte Lösung –