Link to home
Start Free TrialLog in
Avatar of sforcier
sforcier

asked on

The caretPos object and selecting text in a TextArea

Two questions:

1) I cannot find any references for the caretPos object. Could anyone provide a good link to an API for this object?

2) The problem I am trying to solve by using caretPos is that I need to make a non-WYSIWYG html editor. All of the end-users will be using IE 5.5+, so browser compatibility should not be an issue. My question is whether or not using caretPos is an appropriate strategy for solving this problem. I'm not against using some third party tool (I'd even pay if it's a good value), but I will need to be able to add proprietary non-HTML tags. So the tool will have to (at the very least) allow me to insert text at a location that I specify.

Avatar of devic
devic
Flag of Germany image

hi sforcier,
try this:
==================================
<html>
<head>
<script>
var curObj;
function setPos(obj)
{
      if(obj.createTextRange)
      {
            curObj=obj;
            curObj.curPos = document.selection.createRange().duplicate();
      }
}
function insertMyVal()
{
      if(curObj && curObj.curPos)
      {
            with(curObj.curPos)
            {
                  text=" " + curObj.form.myval.value + " ";
            }
      }
      else
      {
            alert("click in text area first")
      }
}
</script>
</head>
<body>
<form>
      <textarea style=width:300px;height:200px; onclick="setPos(this)" onkeyup="setPos(this)">one two, one two, check the microphone
      </textarea><br><br>
      <input name=myval style=width:300px; value="[devic]"><br>
      <input type=button style=width:300px; value="inset my text" onclick="insertMyVal()">
</form>
</body>
</html>
Avatar of sforcier
sforcier

ASKER

Thanks for the post. I have some code that does that already.

The reason I need the API is because I need to make this function work:

//This function returns "length" number of characters that *preceed* the selected text in the object "taObj"
function LeftOfTAPosition(taObj, length){
//Hey, how do I do this??
}

However I will be making many similar text manipulation functions, so access to an API will be very helpful.

look at window status bar:

======================
<!-- ms demo script
     ref: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwebteam/html/webteam12032001.asp
-->
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JScript">
function saveCaret(elem)
{
  if ( elem.isTextEdit )
    elem.caretPos = document.selection.createRange();
}
function getCaretPos(elem)
{
  if ( elem.isTextEdit && elem.caretPos )
  {
    var bookmark = "~";
    var orig = elem.value;
    var caretPos = elem.caretPos;
    caretPos.text = bookmark;
    var i = elem.value.search( bookmark );
    window.status = "Caret is at character " + i;
    elem.value = orig;
  }
}
</SCRIPT>
</HEAD>

<BODY>
<INPUT NAME="txtInput" ONSELECT="saveCaret(this)"
   ONCLICK="saveCaret(this)" ONKEYUP="saveCaret(this)" VALUE="Where are you?">
<INPUT TYPE="button" VALUE="caret pos" ONCLICK="getCaretPos(txtInput)">
</BODY>
</HTML>
Thanks devic, however this code presents a problem because it moves the caretPos object to the end of the text. At least in my code.
Correction, it causes the caret become the *entire* TextArea.
I appreciate the assistance provided, though I would like to reiterate my basic questions.

1) A link to an API of caretPos (doesn't have to be official, just something that tells me what the methods/properties/etc. are)
2) Suggestions on my overall strategy given my needs (in the original post).

I've increased the points significantly because it seems this is more difficult than I initially expected.
I have found the solution to the first question on my own. The object is named TextRange, not caretPos.
http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/obj_textrange.asp
The second question, "Is this a good strategy?" is still open for responses. If none are provided, I will request that the question be closed.
ASKER CERTIFIED SOLUTION
Avatar of Computer101
Computer101
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial