Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как выделить текст в input, начиная с определённой позиции?
 
 автор: Sergey89   (08.10.2005 в 16:36)   письмо автору
 
 

Как выделить текст в input, начиная с определённой позиции?

   
 
 автор: 12345   (12.10.2005 в 02:56)   письмо автору
 
   для: Sergey89   (08.10.2005 в 16:36)
 

<input id=i value=1234567890 onClick=f()>
<script>d=document;ch='character';
function f(){t=d.all.i.createTextRange();t.moveStart(ch);t.moveEnd(ch,-1);t.select();}</script>


Справка: http://xlibscripts.land.ru/jscript_doc/JavaScript/TextRange.html

   
 
 автор: DDK   (12.10.2005 в 07:27)   письмо автору
 
   для: 12345   (12.10.2005 в 02:56)
 

Интересно почему, но в Опере например оно всётаки работает (я думал нет), но работате немного не так, как в осле :) В осле по краям остаётся один символ, в опере слева 2, справа 1... ПолтерГейтс. Чёрт, ненавижу эту убогую несовместимость, достала уже, чесс слово... мучают программеров сволочи... так и подстраивайся по каждый браузер :((

   
 
 автор: Dimon.st   (12.10.2005 в 22:49)   письмо автору
 
   для: Sergey89   (08.10.2005 в 16:36)
 

Здрасти, заодно мне подскажите с выделение - почти тоже самое, но малость сложнее... Есть таблица с несколькими редатируемыми полями, они заведомо больше самого текста, но мне нужно сделать чтоб при нажатие на ячейку таблице курсор ввода помещался в самый конец редактируемой части... Примерно:

<table border=1>
<tr><td height=100 width=100><span contentEditable=true>bla bla</span></td></tr>
</table>

Логично было бы дописать:

<table border=1>
<tr><td height=100 width=100 onclick="document.all.qqq.focus()"><span id=qqq contentEditable=true>bla bla</span></td></tr>
</table>

Только, к сожалению, курсор в начало ставится...
Пробовал дописывать с выделением текста(с нулевой длиной, то есть просто курсор) при onclick, но тогда ... при нажатие на сам текст курсор перемещаеться в самый конец, вместо того что бы быть там куда я кликнул... В общем .... Зарание благодарен за помощь...

   
 
 автор: 12345   (12.10.2005 в 23:46)   письмо автору
 
   для: Dimon.st   (12.10.2005 в 22:49)
 

Если курсор есть TextRange, то почти нет проблем, за исключением того, что объект нужно сначала приписать всему документу (не спану, не ячейке), а потом манипулировать его методами. По клику мыши TextRange почти нормально коллапсируется на место клика по .moveToPoint(x, y). Если надо узнать, в каком span он находится, делается цикл из .parentElement. Если надо поместить в конец, .moveToElementText + .collapse(!1). Очень интересно было бы посмотреть, что у тебя получится, как вообще все факты манипуляций с TextRange . Когда будет код, кинь, пож., для демонстрации

   
 
 автор: Dimon.st   (13.10.2005 в 21:20)   письмо автору
 
   для: 12345   (12.10.2005 в 23:46)
 

Обожаю такие ответы... Нет чтоб помочь написать код, нет примерно объяснил как это работает... Единственное что: надо было после слов "Очень интересно было бы посмотреть, что у тебя получится" поставить ехидную улыбочку... Я здесь почти спятил, html - это нечто, ничего не работает... Только долгими обходными путями у меня получилось примерно это, я бы попросил посмотреть Это и повозможности исправить до нормального кода:

<body id=body>

<table border=1>
<tr><td width=150 height=150 onclick="f1()" id='cell'>
<span contentEditable=true onclick='f2(); f4()' id="span">qqqqqqqqq</span></td></tr>
</table>

</body>

<script>
function f1()
{
t=document.all.body.createTextRange();
t.moveToElementText(document.all.span);
t.select();
}

function f2()
{
t=document.all.body.createTextRange(); t.moveToElementText(document.all.span); t.moveToPoint(window.event.clientX,window.event.clientY); t.select();
}

function f4()
{
document.all.cell.onclick=f5;
}

function f5()
{
document.all.cell.onclick=f1;
}
</script>

Ну и если нужно не выделение, а курсор, можно соответственно дописать collapse...

   
 
 автор: 12345   (14.10.2005 в 02:31)   письмо автору
 
   для: Dimon.st   (13.10.2005 в 21:20)
 

Но ты поднял такую тему, которая требует массу ручной работы и при этом работает не во всех браузерах. Реализация TextRange знаменита своими кривостями и требует тщательной отладки и непомерных затрат времени на это. Потому изложение концепта - самый правильный путь. Если ты не очень силён в JS, вообще не советую браться за это дело (много писать с TextRange), разве что в плане саморазвития. Код от тебя - это уже лучше, говорит о более серьёзном подходе. Теперь мои 5 копеек:

<style>td{width:150;height:85;vertical-align:top}</style>
<table border=1><tr>
<td id=ds1><span id=s1 contentEditable>qqq</span>
</td><td id=ds2><span id=s2 contentEditable>fbgbgfjnfjhn</span>
</td></tr><tr><td id=ds3><span id=s3 contentEditable>ndhmfgrjhmghm</span>
</td><td id=ds4><span id=s4 contentEditable>fdgfdhgfnjyhn<br>dfsdf</span>
</td></tr></table>

<script> d=document;tR=d.body.createTextRange();
d.onclick=function(){if((se=event.srcElement).tagName!='TD')return;
    tR.moveToElementText(d.all[se.id.substring(1)]);tR.collapse(!1);tR.select();
}</script>
Здесь видно, что надо было клик вне спана обрабатывать иначе, чем клик в спане. Это делается в фун. d.onclick , которую можно было бы вызывать и из TD, кто как желает. Вообще задачка интересная, спасибо.

   
 
 автор: Dimon.st   (14.10.2005 в 11:54)   письмо автору
 
   для: 12345   (14.10.2005 в 02:31)
 

Да я действительно не очень силен в JS, точнее в объективно ориентированных системах, с больши кол-во состовляющих, поэтому для меня тем более ценен твой пример. Большое спасибо. Единственное: по-моему логичнее поставить tR=d.body.createTextRange(); после yсловия, ведь при клике на td это действие не нужно... Еще раз спасибо.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования