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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить текст элемента вложенного списка? 
:(
    Опции темы
Win MK 32
Дата 26.5.2009, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 492
Регистрация: 15.7.2002

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



Есть список
Цитата

1. Понятие массива
2. Одномерные массивы
   1. Объявление одномерных массивов
   2. Ввод данных в массив
         1. С клавиатуры
         2. При помощи генератора случайных чисел
         3. Из файла

Зная "2.2.1" надо получить "С клавиатуры". Подскажите пожалуйста, как это можно сделать? Я не соображу.
 smile

Добавлено через 12 минут и 19 секунд
То есть желательно, чтобы у элементов списка не было атрибута id. Но если никак без этого, тогда как с этим атребутом можно сделать? (точно никак без него?)
PM   Вверх
ksnk
Дата 26.5.2009, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Хмм... На jQuery довольно просто

Код

<ol id="look">
  <li>Понятие массива</li>
  <li> Одномерные массивы
    <ol>
      <li> Объявление одномерных массивов</li>
      <li> Ввод данных в массив
        <ol>
          <li> С клавиатуры</li>
          <li> При помощи генератора случайных чисел</li>
          <li> Из файла</li>
        </ol>
       </li>
     </ol>
    </li>
</ol>

Код


alert($('#look li:eq(1) li:eq(1) li:eq(0)').eq(0).text());



Это сообщение отредактировал(а) ksnk - 26.5.2009, 23:07


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Soah
Дата 26.5.2009, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 18.2.2009

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



Код

<script type="text/javascript">
    function showItem() {
        alert(document.getElementById('myList').getElementsByTagName('ul')[1].getElementsByTagName('li')[0].innerHTML);
    }
</script>

<ol id="myList">
    <li>Понятие массива</li>
    <li>Одномерные массивы
        <ol>
            <li>Объявление одномерных массивов</li>
            <li>Ввод данных в массив
                <ol>
                    <li>С клавиатуры</li>
                    <li>При помощи генератора случайных чисел</li>
                </ol>
            </li>
        </ol>
    </li>
</ol>

<input type="button" value="List Item" onclick="showItem()" />

PM MAIL   Вверх
Win MK 32
Дата 26.5.2009, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 492
Регистрация: 15.7.2002

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



ksnk, работает, только я не понял как предать аргументом нужный мне пункт. Все ясно, там нумерация с нуля.
А вообще приятные библиотеки - зло для такого новичка как я :(  Но все равно почему не работает я не пойму.

Soah, не работает почему-то. Вообще строка "2.2.1" известна при загрузке страницы в PHP.
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Untitled Document</title>

</head><body>
<script type="text/javascript">
    function showItem() {
        alert(document.getElementById('myList').getElementsByTagName('ul')[1].getElementsByTagName('li')[0].innerHTML);
    }
</script>

<ol id="myList">
    <li>Понятие массива</li>
    <li>Одномерные массивы
        <ol>
            <li>Объявление одномерных массивов</li>
            <li>Ввод данных в массив
                <ol>
                    <li>С клавиатуры</li>
                    <li>При помощи генератора случайных чисел</li>
                </ol>
            </li>
        </ol>
    </li>
</ol>

<input type="button" value="List Item" onclick="showItem()" />
</body>
</html>


Это сообщение отредактировал(а) Win MK 32 - 26.5.2009, 23:44
PM   Вверх
Soah
Дата 26.5.2009, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 18.2.2009

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



Цитата(Win MK 32 @  26.5.2009,  23:34 Найти цитируемый пост)
не работает почему-то

извиняюсь, поторопился

Код

 function showItem() {
        alert(document.getElementById('myList').getElementsByTagName('ol')[1].getElementsByTagName('li')[0].innerHTML);
    }

PM MAIL   Вверх
Win MK 32
Дата 27.5.2009, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 492
Регистрация: 15.7.2002

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



Soah, извиняюсь, сам не догадался в чем ошибка smile

А как быть? У меня же строка "2.2.1", а не три переменных.
PM   Вверх
ksnk
Дата 27.5.2009, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Soah, Не получится smile Да и у меня работаnь на более сложном списке не будет

Нужно было примерно вот так. Тут 2 решения. jQuery - 1 строка и чистый JS - все остальное
Код

<script src="jquery.js"></script>
<script>
    function scanDomTree (e,callback,lvl){
        var o= e,
            stack=[null]
        if(typeof(lvl)=='undefined') lvl=1000; // never climb so deap;
        do {
            if(!o) {
                o=stack.pop(); continue  // go up
            }
            if(callback.call(this,o))
                return o;
            if (o.firstChild && stack.length<=lvl) {
                stack.push(o.nextSibling);
                o=o.firstChild; // go deep
            } else
                o=o.nextSibling
        } while(stack.length)
        return null;
    }

    function NextOl(el){
        return scanDomTree(el,function(el){
           return el.tagName && el.tagName.toLowerCase()=='ol';
        },1);
    }

    function scan(el,a){
        if(a instanceof Array){
           el=scan(el,a.shift());
           return a.length && scan(NextOl(el),a)|| el;
        }
        return scanDomTree(el,function(el){
           if(el.tagName && el.tagName.toLowerCase()=='li')
               if(--a == 0) return true;
           return false;  
        },2); 
    }
</script>

<ol id="myList">
    <li>Понятие массива
    <ol>
            <li>ООбъявление одномерных массивов</li>
            <li>BВвод данных в массив
                <ol>
                    <li>СC клавиатуры</li>
                    <li>ППри помощи генератора случайных чисел</li>
                </ol>
            </li>
        </ol></li>
    <li>Одномерные массивы
        <ol>
            <li>Объявление одномерных массивов</li>
            <li>Ввод данных в массив
                <ol>
                    <li>С клавиатуры</li>
                    <li>При помощи генератора случайных чисел</li>
                </ol>
            </li>
        </ol>
    </li>
</ol>
<button onclick="alert($('#myList>li:eq(1)>ol>li:eq(1)>ol>li:eq(0)').eq(0).text())">jQuery</button>
<button onclick="alert(scan(document.getElementById('myList'),'2.2.1'.split('.')).innerHTML)">JavaScript</button>



Добавлено @ 01:04
2.2.1 можно преобразовать в массив функцией split

Это сообщение отредактировал(а) ksnk - 27.5.2009, 01:06


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Win MK 32
Дата 27.5.2009, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 492
Регистрация: 15.7.2002

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



Преобразование я уже вот так реализовал:
Код

var str = '2.2.1';
var re = /\d+/g
var numbers = str.match(re)+"<br />";
var o1 = str.match(re)[0];
var o2 = str.match(re)[1];
var o3 = str.match(re)[2];


Добавлено через 9 минут и 59 секунд
Спасибо!

Но так-то оно работает
Код

alert($('#myList>li:eq(1)>ol>li:eq(1)>ol>li:eq(0)').eq(0).text());
alert(scan(document.getElementById('myList'),'2.2.1'.split('.')).innerHTML);

А вот так уже выдает и искомый элемент и все дочерние с тегами:
Код

alert($('#myList>li:eq(1)>ol>li:eq(1)').eq(0).text());
alert(scan(document.getElementById('myList'),'2.2'.split('.')).innerHTML);


Добавлено через 10 минут и 14 секунд
Что есть плохо

Это сообщение отредактировал(а) Win MK 32 - 27.5.2009, 01:22
PM   Вверх
youri
Дата 27.5.2009, 06:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

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



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


 




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


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

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