Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Javascript. Простая рекурсия / 9 сообщений из 9, страница 1 из 1
10.12.2015, 10:27
    #39124648
user89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Javascript. Простая рекурсия
Есть работающий код (здесь при клике по таблице, выводится сама ячейка)
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style>
td {border:1px solid #ccc; padding:5px;}
</style>
</head>
<body>
<table id="data">
  <tr> <td>Текст в ячейке
    <div>Здесь див  <p>Текст абзаца, который внутри див</p>  <span>Текст в спан</span>  </div>
  </td> </tr>
</table>
<script>
document.getElementById('data').addEventListener('mousedown', showCell, true);
function showCell(e) {
  var myCell = getCell(e.target);
alert(myCell); //OK
  function getCell(node) {
    while(node) {
      if (node.tagName == 'TD') {return node;}
      else node = node.parentElement;
    }
    return null;
  }
}
</script>
</body>
</html>


Так, ради интереса решил сделать функцию getCell через рекурсию. Но alert(myCell) выводит undefined
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
function showCell(e) {
  var myCell = getCell(e.target);
alert(myCell);
  function getCell(node) {
    if (node == null) {return null;};
    if (node.tagName == 'TD') {return node;}
    else getCell(node.parentElement);
  }
}


Решение через while меня устраивает, но хочется увидеть рекурсивный вариант.
...
Рейтинг: 0 / 0
10.12.2015, 10:56
    #39124658
Zoria
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Javascript. Простая рекурсия
user89Есть работающий код (здесь при клике по таблице, выводится сама ячейка)
---

Так, ради интереса решил сделать функцию getCell через рекурсию. Но alert(myCell) выводит undefined.
так на него и проверяйте...
пс. в рабочем коде что-то мне скобки чисто визуально не хватает.. он точно работает?
...
Рейтинг: 0 / 0
10.12.2015, 11:14
    #39124669
user89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Javascript. Простая рекурсия
Zoria,

код работает, сейчас перепроверил.   Кстати, в строке рекурсивной функции
Код: javascript
1.
if (node.tagName == 'TD') {return node;}

добавил вывод в консоль
Код: javascript
1.
if (node.tagName == 'TD') {console.log(node); return node;}


Выводит правильно. А вот сам return node - не отрабатывает :(
...
Рейтинг: 0 / 0
10.12.2015, 11:46
    #39124714
Zoria
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Javascript. Простая рекурсия
user89Zoria,

код работает, сейчас перепроверил.   Кстати, в строке рекурсивной функции
Код: javascript
1.
if (node.tagName == 'TD') {return node;}


добавил вывод в консоль
Код: javascript
1.
if (node.tagName == 'TD') {console.log(node); return node;}



Выводит правильно. А вот сам return node - не отрабатывает :(
меня вложенность функции смутила.
ок. тогда попробуйте return getCell(node.parentElement);
...
Рейтинг: 0 / 0
10.12.2015, 12:01
    #39124744
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Javascript. Простая рекурсия
Zoriaок. тогда попробуйте return getCell(node.parentElement);
Это так.
else getCell(node.parentElement) - ничего не возвращает.
...
Рейтинг: 0 / 0
10.12.2015, 12:10
    #39124762
Zoria
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Javascript. Простая рекурсия
ЕвгенийВZoriaок. тогда попробуйте return getCell(node.parentElement);
Это так.
else getCell(node.parentElement) - ничего не возвращает.
т.е вы со мной согласны? :)
...
Рейтинг: 0 / 0
10.12.2015, 12:11
    #39124763
user89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Javascript. Простая рекурсия
Zoria, ЕвгенийВ,

ничего не помогает, даже такое
Код: javascript
1.
2.
3.
4.
5.
    if (node.tagName == 'TD') {
      var n = node;
      console.log(n); // ОК
      return n; // undefined
    }

Новая переменная n выводит в консоль то, что надо,   а return n - не возвращает результата.
...
Рейтинг: 0 / 0
10.12.2015, 12:16
    #39124775
Zoria
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Javascript. Простая рекурсия
user89Zoria, ЕвгенийВ,

ничего не помогает, даже такое
Код: javascript
1.
2.
3.
4.
5.
    if (node.tagName == 'TD') {
      var n = node;
      console.log(n); // ОК
      return n; // undefined
    }


Новая переменная n выводит в консоль то, что надо,   а return n - не возвращает результата.

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
function getCell(node) 
{
    if (node) {
        if (node.tagName == 'TD') { return node; }
        else return getCell(node.parentElement);
     }
     return null;
}
...
Рейтинг: 0 / 0
10.12.2015, 12:29
    #39124806
user89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Javascript. Простая рекурсия
Zoria,

ага, работает! Спасибо!   Окончательный вариант
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
document.getElementById('data').addEventListener('mousedown', showCell, true);
function showCell(e) {
  var myCell = getCell(e.target);
  if (myCell) {console.log('Результат = ', myCell);}

  function getCell(node) {
    if (node) {
      if (node.tagName == 'TD') { return node; }
      else return getCell(node.parentElement);
    }
    return null;
  }
}
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Javascript. Простая рекурсия / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]