2010-07-22 13 views
6

J'ai jeté un oeil sur le web pour trouver des solutions, et il y en a, mais elles semblent toutes diviser le code en IE et Firefox. Je me demandais s'il y avait une manière plus élégante qui fonctionnerait sur chaque navigateur, pour insérer du texte au curseur dans une zone de texte.Insérer du texte au curseur dans une zone de texte, avec Javascript

Merci beaucoup,

Rich

Répondre

0

mettre en œuvre à la fois: le code qui soutient FF et le Code supporing l'IE. Vous pouvez utiliser Frameworks pour écrire du code pour les deux navigateurs. Que le cadre fera le travail de séparer les différences entre les navigateurs.

C'est triste, mais les navigateurs ne sont pas 100% compatibles!

20

Non, il n'y en a pas. IE a ses objets TextRange pour faire le travail. IE> = 9 et tout le reste pour la dernière fois a selectionStart et selectionEnd propriétés sur les zones de texte et les entrées de texte. Cette tâche particulière est pas trop mal: ce qui suit supprimera la sélection en cours (le cas échéant), insérer du texte au caret et repositionner le curseur immédiatement après le texte inséré, dans tous les principaux navigateurs:

function insertTextAtCursor(el, text) { 
    var val = el.value, endIndex, range; 
    if (typeof el.selectionStart != "undefined" && typeof el.selectionEnd != "undefined") { 
     endIndex = el.selectionEnd; 
     el.value = val.slice(0, el.selectionStart) + text + val.slice(endIndex); 
     el.selectionStart = el.selectionEnd = endIndex + text.length; 
    } else if (typeof document.selection != "undefined" && typeof document.selection.createRange != "undefined") { 
     el.focus(); 
     range = document.selection.createRange(); 
     range.collapse(false); 
     range.text = text; 
     range.select(); 
    } 
} 
+0

Merci beaucoup, pensé que les navigateurs pourraient avoir évolué au cours des dernières années, mais évidemment IE choisit toujours d'être différent. – richw81

+1

La bonne nouvelle est que IE 9 a 'selectionStart' et' selectionEnd'. –

+0

Cela a fonctionné très bien pour ma mise en œuvre dans les trois navigateurs, le seul problème que j'avais était de remplacer le texte sélectionné. Si j'ai remplacé val.slice (0, endIndex) par val.slice (0, startIndex), cela a permis de mettre en surbrillance une sélection et de la remplacer par le texte ajouté. Juste pour les autres qui avaient besoin de la même fonctionnalité que moi. – SomeoneRandom