Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Номер строки в textarea


Автор: Гость_Алексей 4.9.2004, 20:46
Здравствуйте все!

Нужно постоянно выводить номер строки в элементе textarea.
Каким образом можно получить об этом информацию?
Заранее спасибо.

Автор: Nobody 4.9.2004, 22:04
например, считать яваскриптом содержимое этой textarea и посчитать количество символов перевода строки, которые там есть ДО нужной строки.

Автор: Sardar 4.9.2004, 22:42
Если не менять шрифт, то аттрибуты cols и rows задают количество строк и количество символов в строке. Отсюда меряй:
Код
textaera.value.length/textarea.getAttribute("cols")

Количествно строк в тексте.

В Мозилле узнать где курсор можно через selection(Start|End) отсюда узнаешь на какой он строке.

Для ИЕ можно сообразить что то подобное:
Код
var sel=document.selection.createRange(); //возьмем TextRange под курсором
sel.moveStart('character', -textarea.value.length); //отведем начало на первый символ
alert(sel.text.length); // возьмем длинну текста, наше смещение в символах

Автор: yony 5.9.2004, 22:24
Вообщем для того чтобы получать номер строки и позицию в строке в элементе textarea нужен следующий код:
Код

<HTML>
<HEAD>
<script>
function  count() {
var sel=document.selection.createRange();
sel.moveStart('character', -document.aForm.aTextArea.value.length);
var simbol_num=sel.text.length;
var ch=document.aForm.aTextArea.value;
ch_len=ch.length;
var string_num=1;
var string_pos=-1;
for(i=0;i<=ch_len;i++)
 {    
   comp = ch.charCodeAt(i);
   comp1 = ch.charCodeAt(i-1);
   if(comp=="10"&&comp1=="13") { string_num++;}
   if(comp=="13")              { string_pos=i+1; }
   if(i == simbol_num) break;
 }
if(comp==13) document.aForm.st.value=string_num+1;else document.aForm.st.value=string_num;
if(comp==13) document.aForm.sim.value=1; else document.aForm.sim.value=simbol_num-string_pos;
str_pos=-1;
}

</SCRIPT>
</HEAD>
<BODY>
<FORM NAME="aForm">
<TEXTAREA NAME="aTextArea" ROWS="5" COLS="80" WRAP="soft" ONKEYDOWN="insertAtCaret();" ONSELECT="count();" ONCLICK="count();" ONKEYUP="count();"></TEXTAREA>
<BR>
строка
<input readonly type="text" name="st" size=20>столбец
<input readonly type="text" name="sim" size=20>
</FORM>
</BODY>
</HTML>

Автор: Sardar 5.9.2004, 23:46
yony код будет работать только в ИЕ, как в Мозилле узнать позицию каретки(селекции) я писал выше.
Поиск цепочек \r, \rn, \n даст точный результат, но будет притормаживать на длиных текстах и убитых машинах.
Если используешь monospace(стандартный для textarea) шрифт, то перебор не нужен, различныe шрифты, то ищи перевод строки регами.


Автор: vkonts 18.9.2011, 00:49
а не подскажите как сделать так, что бы в textarea можно было в одну строку ввести не более, скажем 30 символов и чтобы после этих 30 символов шел переход на след. строку, т.к. без такого переноса в базу заносится все одной строкой.

Автор: InfMag 18.9.2011, 10:31
Учтите что у вас ch_len, comp, comp1, str_pos по области видимости глобальные.
str_pos я вообще не пойму откуда взялся и какую роль в коде играет.
Для обрезания строки более 30-и символов, где ch - переменная с содержимым:
Код

ch = ch.replace(/([^\n]{30})([^\n]{1})/gi, '$1\n$2');

Вроде должно работать.

Автор: Siscipsak 1.9.2022, 00:13
Модератор: Сообщение скрыто.

Автор: impaphy 5.9.2022, 02:42
Модератор: Сообщение скрыто.

Автор: fedGlasse 7.9.2022, 04:44
Модератор: Сообщение скрыто.

Автор: elolcange 10.9.2022, 02:40
Модератор: Сообщение скрыто.

Автор: DrawSwade 13.9.2022, 04:39
Модератор: Сообщение скрыто.

Автор: boaxike 16.9.2022, 19:12
Модератор: Сообщение скрыто.

Автор: objelve 7.10.2022, 05:47
Модератор: Сообщение скрыто.

Автор: aqually 12.10.2022, 21:25
Модератор: Сообщение скрыто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)