powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Javascript. Простая рекурсия
9 сообщений из 9, страница 1 из 1
Javascript. Простая рекурсия
    #39124648
Фотография user89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть работающий код (здесь при клике по таблице, выводится сама ячейка)
Код: 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
Javascript. Простая рекурсия
    #39124658
Zoria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user89Есть работающий код (здесь при клике по таблице, выводится сама ячейка)
---

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

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

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


Выводит правильно. А вот сам return node - не отрабатывает :(
...
Рейтинг: 0 / 0
Javascript. Простая рекурсия
    #39124714
Zoria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Javascript. Простая рекурсия
    #39124744
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zoriaок. тогда попробуйте return getCell(node.parentElement);
Это так.
else getCell(node.parentElement) - ничего не возвращает.
...
Рейтинг: 0 / 0
Javascript. Простая рекурсия
    #39124762
Zoria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВZoriaок. тогда попробуйте return getCell(node.parentElement);
Это так.
else getCell(node.parentElement) - ничего не возвращает.
т.е вы со мной согласны? :)
...
Рейтинг: 0 / 0
Javascript. Простая рекурсия
    #39124763
Фотография user89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Javascript. Простая рекурсия
    #39124775
Zoria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Javascript. Простая рекурсия
    #39124806
Фотография user89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
9 сообщений из 9, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Javascript. Простая рекурсия
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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