2016-11-16 2 views
2

Ich möchte Caret-Position in einem editierbaren Element festlegen, aber es scheint nicht zu funktionieren.Caret-Position in einem editierbaren Element festlegen

var el = document.getElementsByTagName('div')[0]; 
 
var range = document.createRange(); 
 
var sel = window.getSelection(); 
 
range.setStart(el, 2); 
 
range.collapse(true); 
 
sel.removeAllRanges(); 
 
sel.addRange(range); 
 
el.focus();
<div contenteditable>Hi ! How are you doing ?</div>

Antwort

6

Try this:
Nur range.setStart ersetzen (el, 2) mit range.setStart (el.childNodes [0], 2)

var el = document.getElementsByTagName('div')[0]; 
 
var range = document.createRange(); 
 
var sel = window.getSelection(); 
 
range.setStart(el.childNodes[0], 2); 
 
range.collapse(true); 
 
sel.removeAllRanges(); 
 
sel.addRange(range); 
 
el.focus();
<div contenteditable>Hi ! How are you doing ?</div>

Sie übergeben den falschen Knoten an den setStart f Salbung. Sie müssen einen Textknoten übergeben.

+0

Vielen Dank es funktioniert. – tonymx227

+0

@ tonymx227 werfen Sie einen Blick auf die Antwort von user2693928 für Details http://stackoverflow.com/questions/40632975/set-caret-position-in-a-content-editable-element/40633278#40633278 –

1

Wenn der startNode ein Knoten vom Typ Text, Kommentar oder CDATASection ist, dann ist startOffset die Anzahl der Zeichen ab dem Start von startNode. Bei anderen Knotentypen ist startOffset die Anzahl der untergeordneten Knoten zwischen dem Start von startNode.

Wenn es nicht textarea ist, gibt es die untergeordneten Elemente für Offsets.

Sie können verschiedene Elemente in der contenteditable wie folgt festgelegt:

<div contenteditable> 
<p>para 1</p> 
<p>para 2</p> 
<p>para 3</p> 
<p>para 4</p> 
</div> 
<script> 
    var el = document.getElementsByTagName('div')[0]; 
    var p = document.querySelector('p'); 
    var range = document.createRange(); 
    var sel = window.getSelection(); 
    range.setStart(el, 3); 
    range.collapse(true); 
    sel.removeAllRanges(); 
    sel.addRange(range); 
    el.focus(); 
</script> 
+0

Es funktioniert nicht, das 'setStart (el, 3)' funktioniert nicht ... – tonymx227

Verwandte Themen