webForumDet fria alternativet

Markörens position i textarea

3 svar · 636 visningar · startad av M@rtin

M@rtinMedlem sedan dec. 19991 214 inlägg
#1

Hur får man fram markörens position i en textarea?

Med alla webbläsare utom Internet Explorer är det såklart enkelt:

textarea.selectionStart

Men i IE är det inte lika enkelt. Det här måste vara ett jättevanligt problem men google ger bara felaktiga svar. Finns lösningar som fungerar i en vanlig textruta men de funkar inte i en textarea.

Någon som vet?

MogMedlem sedan nov. 2003255 inlägg
#2

Nåt sånt här du är ute efter?

function insertAtCursor(myField, txt)
{
             // IE
	if (document.selection && document.selection.createRange) {
		// Hämta markering i rutan
		myField.focus();
		sel = document.selection.createRange();
                         // Om nåt är markerat
		if (sel.text.length != 0) {
			var str = sel.text;
		}
		else {
			var str = txt;
		}

		sel.text = str;
	}
	else if (document.getSelection) {

		var allTxt = myField;
		var beginTxt = allTxt.value.substring(0, allTxt.selectionStart);
		var endTxt = allTxt.value.substring(allTxt.selectionEnd, allTxt.value.length);
		var selTxt = allTxt.value.substring(allTxt.selectionStart, allTxt.selectionEnd);
		if (selTxt.length != 0) {
			var str = selTxt;
		}
		else {
			var str = txt;
		}

		myField.value = beginTxt + str + endTxt;
	}
	else {
		myField.value = myField.value + txt;
	}
}

Anropa med

onClick="insertAtCursor(document.getElementById('myField'),'textSomSkaInVidMarkören');"
M@rtinMedlem sedan dec. 19991 214 inlägg
#3

Njae inte riktigt, men nu har jag löst det:

function getCaretPos(obj){
	if(obj.selectionStart){
		return obj.selectionStart;
	}else if(document.selection && document.selection.createRange){
		obj.focus();
		var sel = document.selection.createRange();
		var dup = sel.duplicate();
		var c = "\001";
		sel.text=c;
		dup.moveToElementText(obj);
		var pos = dup.text.indexOf(c);
		sel.moveStart('character',-1);
		sel.text="";
		return pos;
	}else{
		return -1;
	}
}
johaseoMedlem sedan maj 2009250 inlägg
#4

aha ... problemet är löst? Perfekt .. markera gärna att denna tråd har en lösning ... ha det gott!

Genererad på 367 ms · cache AV · v20260730165559-full.f96bc7eb