Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   получить ссылку на родительский элемент(контейнер) (https://javascript.ru/forum/events/4490-poluchit-ssylku-na-roditelskijj-ehlement-kontejjner.html)

rwety 27.07.2009 13:01

получить ссылку на родительский элемент(контейнер)
 
есть таблица в которой лежит checkbox
<table>
<tr>
<td class="lefttd" id="cell">
<input id="CheckboxBut" type="checkbox" />
</td>
</tr>
</table>

при нажатии на checkbox нужно найти id родительского элемента,т.е cell.
как получить id checkbox'а на который нажали я знаю. Теперь нужно получить ссылку на td в котором находится checkbox.

B~Vladi 27.07.2009 13:04

Рекурсивно проходите по parentNode и проверяйте наличие у него id.

Riim 27.07.2009 13:12

getElementById отменили?

B~Vladi 27.07.2009 13:17

Цитата:

Сообщение от Riim
getElementById отменили?

Ну может неизвестен id:)

rwety 27.07.2009 16:28

getElementById никто не отменял. :)
Изначально id неизвестен. это я для примера написал.
думаю вариант, который посоветовал B~Vladi мне подойдет с некоторыми модификациями. Дело в том что наличие id проверять не совсем корректно(а если появится в td еще один дочерний элемент с id), но это не критично, тоже можно использовать.
В моем случае мне будет удобней использовать такую функцию
function getParent(el, parentTagName) {
    var obj = el;
    while (obj.tagName !== parentTagName) {
        obj = obj.parentNode;
    }
    return obj;
}

вешаем на событие, например, onclick:
onclick ="getParent(this, 'TD')"

всем спасибо

B~Vladi 27.07.2009 16:37

Я имел ввиду что-то вроде этого:

function getParent(obj, parentTagName) {
    return (obj.tagName==parentTagName)?obj:getParent(obj.parentNode, parentTagName);
}

Riim 27.07.2009 17:36

Цитата:

Сообщение от B~Vladi
Я имел ввиду что-то вроде этого:

А зачем здесь рекурсия? Чем обычный цикл не подходит?

rwety, если среди предков не будет ни одного с нужным тегом, то цикл дойдет до html, у которого parentNode равен undefined/null, далее попытка считать свойство obj.tagName приведет к ошибке.

B~Vladi, с твоим вариантом та же проблема.

B~Vladi 27.07.2009 17:41

Цитата:

Сообщение от Riim
B~Vladi, с твоим вариантом та же проблема.

Мы же знаем, что это не проблема:)
И код приводился не как универсальный.
Цитата:

Сообщение от Riim
А зачем здесь рекурсия? Чем обычный цикл не подходит?

Обычная рекурсия... Обычный цикл... Я мысль свою показал, а не исправил код. Когда-то я сам столкнулся с такой задачей и для меня это показалось самым простым и красивым решением.

Riim 27.07.2009 17:47

Цитата:

Сообщение от B~Vladi
красивым решением

У нас очень разные понятия о красоте кода.

B~Vladi 27.07.2009 17:52

Цитата:

Сообщение от Riim
У нас очень разные понятия о красоте кода.

Меньше кода - красивее:D


Часовой пояс GMT +3, время: 03:07.