|
|
|
| Как выделить текст в input, начиная с определённой позиции? | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: 12345
(12.10.2005 в 02:56)
| | Интересно почему, но в Опере например оно всётаки работает (я думал нет), но работате немного не так, как в осле :) В осле по краям остаётся один символ, в опере слева 2, справа 1... ПолтерГейтс. Чёрт, ненавижу эту убогую несовместимость, достала уже, чесс слово... мучают программеров сволочи... так и подстраивайся по каждый браузер :(( | |
|
|
|
|
|
|
|
для: 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, но тогда ... при нажатие на сам текст курсор перемещаеться в самый конец, вместо того что бы быть там куда я кликнул... В общем .... Зарание благодарен за помощь... | |
|
|
|
|
|
|
|
для: Dimon.st
(12.10.2005 в 22:49)
| | Если курсор есть TextRange, то почти нет проблем, за исключением того, что объект нужно сначала приписать всему документу (не спану, не ячейке), а потом манипулировать его методами. По клику мыши TextRange почти нормально коллапсируется на место клика по .moveToPoint(x, y). Если надо узнать, в каком span он находится, делается цикл из .parentElement. Если надо поместить в конец, .moveToElementText + .collapse(!1). Очень интересно было бы посмотреть, что у тебя получится, как вообще все факты манипуляций с TextRange . Когда будет код, кинь, пож., для демонстрации | |
|
|
|
|
|
|
|
для: 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... | |
|
|
|
|
|
|
|
для: 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, кто как желает. Вообще задачка интересная, спасибо. | |
|
|
|
|
|
|
|
для: 12345
(14.10.2005 в 02:31)
| | Да я действительно не очень силен в JS, точнее в объективно ориентированных системах, с больши кол-во состовляющих, поэтому для меня тем более ценен твой пример. Большое спасибо. Единственное: по-моему логичнее поставить tR=d.body.createTextRange(); после yсловия, ведь при клике на td это действие не нужно... Еще раз спасибо. | |
|
|
|