Ver Mensaje Individual
  #3 (permalink)  
Antiguo 20/10/2005, 17:03
Avatar de flaviovich
flaviovich
 
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 19 años, 3 meses
Puntos: 39
Hola el_javi y Caricatos!
Parece que encontre la solucion. Solo que es un tanto grande
Advierto que los creditos no son mios. Yo simplemente hice unas pequeñas modificaciones. El codigo original lo pueden ver aqui.
Código HTML:
<html>
<head>
<style type="text/css">
  textarea, input {
    behavior: url(selection.htc);
  }
</style>
<script type="text/javascript">
function selectText(start,end)
{
	var text = document.getElementById("test");
	text.setSelectionRange(start, end);
}
</script>
</head>
<body>
<form>
<input id="test" type="text" value="CON CONTENIDO" onFocus="selectText(0,0)">
</form>
</body>
</html> 
Codigo del archivo selection.htc
Código HTML:
<public:component>
  <public:property name="selectionStart" get="getSelectionStart" />
  <public:property name="selectionEnd" get="getSelectionEnd" />
  <public:attach event="onfocus" handler="storeSelection" />
  <public:attach event="onselect" handler="storeSelection" />
  <public:attach event="onclick" handler="storeSelection" />
  <public:attach event="onkeyup" handler="storeSelection" />
  <public:method name="setSelectionRange" />
  <script type="text/javascript">
    var selection = null;
    var selectionStart = -1;
    var selectionEnd = -1;

    function storeSelection(noRecurse)
    {
      // Иногда document.selection устанавливается правильно лишь
      // спустя некоторое время, приходится это учитывать
      if (!noRecurse)
        setTimeout(function() {storeSelection(1)}, 500);

      if (element.document.selection.type != "None" && element.document.selection.type != "Text")
        return;

      var range = element.document.selection.createRange();
      if (range.parentElement() != element)
        return;

      selection = range.duplicate();
    }

    function getSelectionStart()
    {
      updateVars()
      return selectionStart;
    }
    function getSelectionEnd()
    {
      updateVars();
      return selectionEnd;
    }
    function updateVars()
    {
      if (!selection)
        return;

      selectionStart = selectionEnd = -1;

      // Поправка на странный глюк при определении позиции в конце однострочного текста
      if (element.value.indexOf("\r") < 0)
      {
        var wholeRange = element.document.body.createTextRange();
        wholeRange.moveToElementText(element);
        if (!selection.compareEndPoints("startToEnd", wholeRange))
          selectionStart++;
        if (!selection.compareEndPoints("endToEnd", wholeRange))
          selectionEnd++;
      }

      selectionStart -= selection.moveStart("character", -element.value.length);
      selectionEnd -= selection.moveEnd("character", -element.value.length);
      selection = null;

      // Вводим поправку на то, что знак \r не учитывается
      var pos = -1;
      do
      {
        pos = element.value.indexOf("\r", pos + 1);
        if (pos >= 0 && selectionStart > pos)
          selectionStart++;
        if (pos >= 0 && selectionEnd > pos)
          selectionEnd++;
      } while (pos >= 0 && pos < selectionEnd);
    }

    function setSelectionRange(startPos, endPos)
    {
      if (startPos > endPos)
        startPos = endPos;

      // Вводим поправку на то, что знак \r не учитывается
      var startCorrection = element.value.substr(0, startPos).match(/\r/g);
      startCorrection = startCorrection ? startCorrection.length : 0;
      var endCorrection = element.value.substr(0, endPos).match(/\r/g);
      endCorrection = endCorrection ? endCorrection.length : 0;

      selection = element.createTextRange();
      selection.collapse(true);
      selection.moveEnd("character", endPos - endCorrection);
      selection.moveStart("character", startPos - startCorrection);
  
      selection.select();

      // Это нужно для случая, когда startPos == endPos
      storeSelection();
    }
  </script>
</public:component> 
Algunas observaciones. En IE funciona bien
En realidad, la finalidad principal de este codigo, es la selección de un texto determinado en un input o textarea. Por lo tanto, no es una solucion optima, a mi parecer. Como variante podria usarse el objeto selection.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.