Guten Abend,
Edit: das Problem ist ein anderes als ich gedacht habe: anchorOffset liefert den offset nach dem letzten vorkommenden html element nur weiß ich noch nicht wie ich dieses auslesen kann. Mir würde es auch schon ausreichen wie ich auf das innHTML des anchorNode zugreifen kann. (Im moment nutze ich das parent Element) bzw. wie ich den inhalt rechts von anchorNode verändern kann.
Oder gibt es eine ganz andere Lösung die Cursor position in einen Text zu ermitteln, und ich bin gerade völlig auf dem Holzweg?
Nachfolgendes hat sich dementsprechend erledigt:
Mein problem ist das der Cursor nicht an der richtigen Position gesetzt wird.
Im Moment verhält sich es so das wenn ich den Cursor zum ersten mal setze er korrekt angezeigt wird. Doch klicke ich auf nachfolgende Text dann hat selection.anchorOffset den Wert (aktuelle Selection - alte Selection).
Verwende ich den auskommentierten code ist das verhalten genau anders rum.
PHP-Code:
Editor.prototype.locateCursorPosition = function()
{
var selection = window.getSelection();
document.getElementById("Debug").innerHTML = selection.focusOffset+"-"+selection.anchorOffset+"<br>";
//if(this.writeOn.startPosition > 0 && this.writeOn.element == selection.anchorNode.parentNode){
// this.writeOn.startPosition = this.writeOn.startPosition > selection.focusOffset ? this.writeOn.startPosition+selection.anchorOffset: selection.anchorOffset;
//}else
this.writeOn.startPosition = selection.anchorOffset ;
this.writeOn.element = selection.anchorNode.parentNode;
document.getElementById("Debug").innerHTML += this.writeOn.startPosition +"<br>";
this.setCursor();
document.getElementById("Debug").innerHTML += this.writeOn.startPosition ;
};
Edit: as problem scheint an set Cursor zu liegen, denn wenn ich das deaktiviere fügt er den text wenigstens an der richtigen stelle ein.
PHP-Code:
Editor.prototype.setCursor = function()
{
if(this.cursor)
this.removeCursor();
var cursor = '<span id="'+this.ID+'Cursor" style="font-weight:bold;display:inline;">|</span>';
var before = this.writeOn.element.innerHTML.substr(0,this.writeOn.startPosition);
var after = this.writeOn.element.innerHTML.substr(this.writeOn.startPosition);
this.writeOn.element.innerHTML = before + cursor + after;
this.cursor = document.getElementById(this.ID+"Cursor");
this.cursor.style.position = "absolute";
this.cursor.style.left = this.cursor.offsetLeft+"px";
this.cursor.style.top = this.cursor.offsetTop+"px";
this.cursor.interval = setInterval(function(){blink(this);}.bind(this.cursor),500);
};
und ein weiteres Problem ist mir gerade aufgefallen: ist der offset nach einen html element fängt dieser neu an zu zählen. Also müsste ich irgentwie den textinhalt nach einem html element ermitteln und um welches html element es sich handelt.
ich hoffe es kann mir jemand helfen.
mfg
Christian