Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразование списков, списки 
V
    Опции темы
Pena
  Дата 13.7.2009, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


КорнеплодЪ
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 20.4.2006
Где: эРэФия, аул Москв а...

Репутация: нет
Всего: нет



Задача: В textarea набирается список, каждый пункт которого обозначается численно>
1 Раз
2 Два
2.1 Три
2.2 Четыри
3 Пять
4 Шесть
4.1 Семь
4.2 Восемь
4.2.1 Девять
4.2.2 Десять

Численные обозначения удаляются, а последующее загоняется в "обёртку" (НП: [Такой-то уровень]...[/Такой-то уровень] )

Как носитель "говорящего nick-a" накрутил нечто неработающее, но и невызывающее ошибки:
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN">
<HTML>
 <Head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <meta name="author" content=":|">
  <meta name="keywords" content="14\83">
  <title> :| </title>
  <link rel="stylesheet" type="text/css" href="csss/">
  <style type="text/css"><!--
   Body {margin: 0;}
   .tb0 {width: 490px; border: 0; font-family: Verdana, Arial; font-size: 12px;}
   #td0 {text-align: right;}
   
   Textarea {padding-top: 5px; padding-left: 10px; width: 480px; height: 720px; border: 1px solid black;}
  --></style>
  
  <script type="text/javascript" src="jss/"></script>
  <script type="text/javascript"><!--

function f0(){
 var a0 = new Array(); //Создание нового массива "a0" для последующего разбиения содержимого textarea "ta0" на ячейки
 a0 = document.getElementsByName("ta0")[0].innerHTML.split('\n'); //Разбиение содержимого textarea "ta0" на ячейки массива "а0", при помощи метода split('\n')
   
 for(var i = 0; i <= a0.lenght; i++){ //Перебор каждой ячейки массива "а0"
  var a1 = new Array(); //Создание нового массива "a1" для последующего разбиения ячеек массива "a0"
  a1 = a0[i].split(' '); //Разбиение содержимого ячейки масива "a0" в строке "i", при помощи метода split(' ')
  
  var склейка = a1[1]; //Обьявление переменной "склейка" со значением первой ячейки массива "a1" для дальнейшего обьединения всех ячеек массива "а1" за исключением нулевой
  for(var j = 2; j <= a1.lenght; j++){ //Cклейка всех ячеек массива "a1" за исключением нулевой
   склейка =+ a1[j];
  }
  var pB0 = /(\d+).(\d+).(\d+)/; //Объявление регулярного выражения обозначающего три целых числа разделённых каким-либо знаком
  var pB1 = /(\d+).(\d+)/; //Объявление регулярного выражения обозначающего два целых числа разделённых каким-либо знаком
  var pB2 = /(\d+)/; //Объявление регулярного выражения обозначающего одно целое число

  if(pB0.test(a1[0]) == true){ //Сравнение значения указанного в круглых скобках метода test с образцом - регулярным выражением pB0 
   alert('[3 уровень]' + склейка + '[3 уровень]'); //Наделение значения переменной "склейка" свойствами CSS третего уровня списка
  }
  else{
   if(pB1.test(a1[0]) == true){ //Сравнение значения указанного в круглых скобках метода test с образцом - регулярным выражением pB1
    alert('[2 уровень]' + склейка + '[/2 уровень]'); //Наделение значения переменной "склейка" свойствами CSS второго уровня списка
   }
   else{
    if(pB2.test(a1[0]) == true){ //Сравнение значения указанного в круглых скобках метода test с образцом - регулярным выражением pB2 
     alert('[1 уровень]' + склейка + '[/1 уровень]'); //Наделение значения переменной "склейка" свойствами CSS первого уровня списка
    }
    else{
     alert('Строка "' + a0[i] + '" не является точкой списка'); //Сообщение об ошибке, возникающей если в ячейке "i" массива "a0" не определена точка списка
    }
   }
  }
 }

 //document.forms['frm0'].submit();
}

  --></script>
 </Head>
 <Body><Table class="tb0"><tr><td id="td0">

  <form name="frm0" method="post" action="_php/cnucoK_out.php">
   <textarea name="ta0" wrap="off">
1 Раз
2 Два
2.1 Три
2.2 Четыри
3 Пять
4 Шесть
4.1 Семь
4.2 Восемь
4.2.1 Девять
4.2.2 Десять
   </textarea>
   <div onClick="f0();" style="font-weight: bold; cursor: hand; pointer: hand;">[ > ]</div>
  </form>

 </td></tr></Table></Body>
</HTML>


Буду признателен за помощь и совет как это исправить + сделать грамотнее...  smile 

Это сообщение отредактировал(а) Pena - 13.7.2009, 23:40
--------------------
Самовар по всем вопросам - сильно не ругайте 
PM   Вверх
Onis
Дата 14.7.2009, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 18.6.2005
Где: Украина, Николаев

Репутация: 2
Всего: 3



Напишите конкретнее во что должно это преобразоваться.

Цитата(Pena @  13.7.2009,  15:31 Найти цитируемый пост)

1 Раз
2 Два
2.1 Три
2.2 Четыри
3 Пять
4 Шесть
4.1 Семь
4.2 Восемь
4.2.1 Девять
4.2.2 Десять


PM MAIL   Вверх
Pena
Дата 14.7.2009, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


КорнеплодЪ
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 20.4.2006
Где: эРэФия, аул Москв а...

Репутация: нет
Всего: нет



Цитата(Onis @ 14.7.2009,  16:55)
Напишите конкретнее во что должно это преобразоваться.

Цитата(Pena @  13.7.2009,  15:31 Найти цитируемый пост)

1 Раз
2 Два
2.1 Три
2.2 Четыри
3 Пять
4 Шесть
4.1 Семь
4.2 Восемь
4.2.1 Девять
4.2.2 Десять

 smile 
[1 уровень] Раз [/1 уровень]
[1 уровень] Два [/1 уровень]
[2 уровень] Три [/2 уровень]
[2 уровень] Четыри [/2 уровень]
[1 уровень] Пять [/1 уровень]
[1 уровень] Шесть [/1 уровень]
[2 уровень] Семь [/2 уровень]
[2 уровень] Восемь [/2 уровень]
[3 уровень] Девять [/3 уровень]
[3 уровень] Десять [/3 уровень]


--------------------
Самовар по всем вопросам - сильно не ругайте 
PM   Вверх
diadiavova
Дата 18.7.2009, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 11
Всего: 142



Код

<html>
<head>
    <title></title>
</head>
<body>

    <script type="text/javascript">
        function GenerateTree()
        {
            var ta = document.getElementById("ta0");
            var treeNodeItems = ta.innerHTML.split(/\n/);
            for (var i = 0; i < treeNodeItems.length; i++)
            {
                var s = new String(treeNodeItems[i]);
                var spaceIndex = s.search(/\s/);
                var nums = s.substring(0, spaceIndex - 1);
                var level = nums.split(".").length;
                var contentIndex = s.search(/\s\S/) + 1;
                var content = s.substring(contentIndex);
                treeNodeItems[i] = "[" + level + "уровень" + "]" + content + "[/" + level + "уровень" + "]";

            }
            return treeNodeItems.join("\n");

        }

        function showTree()
        {
            alert(GenerateTree());
        }
    </script>

    <textarea id="ta0" cols="50" rows="20">1 Раз
2 Два
2.1 Три
2.2 Четыри
3 Пять
4 Шесть
4.1 Семь
4.2 Восемь
4.2.1 Девять
4.2.2 Десять</textarea>
    <input type="button" value="aaa" onclick="showTree();" />
</body>
</html>



Проверял только в лисе smile 

Это сообщение отредактировал(а) diadiavova - 20.7.2009, 02:26


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Pena
Дата 20.7.2009, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


КорнеплодЪ
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 20.4.2006
Где: эРэФия, аул Москв а...

Репутация: нет
Всего: нет



М-м-м... благодарю! То что надо.
Всё понятно, жаль что сам не додумываю(

з.ы. И вот не могу догнать, что 8-ая строка делает? =\ + правильо ли я расписал в комментариях все отсальные?))
Код

var ta = document.getElementById("ta0");
 var treeNodeItems = ta.innerHTML.split(/\n/); //Разбиение содержимого "ta" на ячейки массива "treeNodeItems" по знаку переноса строки ("\n")
 for (var i = 0; i < treeNodeItems.length; i++){ //Перебор ячеек массива "treeNodeItems"
  var s = new String(treeNodeItems[i]); //Объявление переменной "s" и присвоение ей строчного значения ячейки "i" массива "treeNodeItems"
  var spaceIndex = s.search(/\s/); //Получение порядкового номера (index-a) первого встречающегося в строке пробела
  var nums = s.substring(0, spaceIndex - 1); //Получение подстроки "nums" начиная с первого знака (0) до "spaceIndex - 1" 
  var level = nums.split(".").length; //Разбиение подстроки "nums" на ячейки массива, с присвоением переменной "level" его (массива) размером
  var contentIndex = s.search(/\s\S/) + 1; //?
  var content = s.substring(contentIndex); //...
  treeNodeItems[i] = "[" + level + "уровень]" + content + "[/" + level + "уровень]"; //...

--------------------
Самовар по всем вопросам - сильно не ругайте 
PM   Вверх
diadiavova
Дата 20.7.2009, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 11
Всего: 142



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

В 7-ой строке я просто разбиваю строку по точкам и определяю количество элементов получившегося массива, оно будет на 1 больше количества точек, что и соответствует уровню.

А так - всё верно.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Pena
Дата 20.7.2009, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


КорнеплодЪ
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 20.4.2006
Где: эРэФия, аул Москв а...

Репутация: нет
Всего: нет



diadiavova,  smile
Тему закрываю)
--------------------
Самовар по всем вопросам - сильно не ругайте 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0524 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.