Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Поиск родителя у динамических элементов (https://javascript.ru/forum/jquery/74174-poisk-roditelya-u-dinamicheskikh-ehlementov.html)

DarkSouls 19.06.2018 20:38

Поиск родителя у динамических элементов
 
Приветствую господа программисты.
Прошу помощи;
<tr>
    <td></td>
    <td>Name</td>
// .......
    <td id='rform'>
        <button type='button'>add</button>
    </td>
</tr>

в этот td по клику на кнопку динамически добавляется форма;
$('td').on('click', 'button', function () {
    var elem = $(this),
        action = $(elem).attr('id'), 
        name = $(elem).parent().parent('tr').find('td:eq(1)').text(),
        line = $(elem).parent('td');
    
    switch(action) {
        // ......
        case 'send': _add_form_link(line, name); break;
        // ......
    }
}
function _add_form_link(line, name) {
    var form = $('<div/>').attr({'class':'rform'})
    .append(
        $('<form/>').attr({'method':'post', 'action':'/options'})
        .append(
            $('<input/>').attr({'type':'hidden','value':name,'name':'name'}),
            $('<input/>').attr({'type':'hidden','value':sett,'name':'sett'}),
            $('<input/>').attr({'type':'text','name':'link','placeholder':'enter link'}),
            $('<button/>').attr({'type':'button','id':'send'}).text('send'),
            $('<button/>').attr({'type':'button'}).html('×')
        )).appendTo($(line));

	var left = ($(form).width() -10), persp = left +10;
	$(form).css({
		'left':'-'+ left +'px',
		'top':($(form).height()/2 -$(line).height()/2 -7) +'px'
	}).animate({'left':'-'+ persp +'px', 'opacity':1}, 300);
}

теперь по клику на send нужно найти tr родитель.
опыта мало. новичок.
$(this).parents('tr'); // не работает
$(this).closest('tr'); // тоже не работает
$(this).parent().parent().parent().parent('tr') // как ни странно но тоже нет :)

:help:

рони 19.06.2018 20:53

Цитата:

Сообщение от DarkSouls
$(this).parents('tr'); // не работает

работает!!!

DarkSouls 19.06.2018 21:08

почему-то не выходит.
пробую найти родителя td и показать его id:
alert($(this).parents('td').attr('id')); // undefined

рони 19.06.2018 21:31

Цитата:

Сообщение от DarkSouls
почему-то не выходит.

где код?

DarkSouls 19.06.2018 21:39

кнопка send находиться в динамически созданной форме;
$('td').on('click', 'button', function () {
    var elem = $(this),
        action = $(elem).attr('id'), 
        name = $(elem).parent().parent('tr').find('td:eq(1)').text(),
        line = $(elem).parent('td');
    
    switch(action) {
        // ......
        case 'send': _add_form_link(line, name); break;
        // ......
    }
}
function _add_form_link(line, name) {
    var form = $('<div/>').attr({'class':'rform'})
    .append(
        $('<form/>').attr({'method':'post', 'action':'/options'})
        .append(
            $('<input/>').attr({'type':'hidden','value':name,'name':'name'}),
            $('<input/>').attr({'type':'hidden','value':sett,'name':'sett'}),
            $('<input/>').attr({'type':'text','name':'link','placeholder':'enter link'}),
            $('<button/>').attr({'type':'button','id':'send'}).text('send'), // вот тут......................
            $('<button/>').attr({'type':'button'}).html('×')
        )).appendTo($(line));

	var left = ($(form).width() -10), persp = left +10;
	$(form).css({
		'left':'-'+ left +'px',
		'top':($(form).height()/2 -$(line).height()/2 -7) +'px'
	}).animate({'left':'-'+ persp +'px', 'opacity':1}, 300);
}

все это вставляется;
<tr>
    <td></td>
    <td>Name</td>
// .......
    <td id='rform'>
        <button type='button'>add</button>
        // вот сюда...............................................................................
    </td>
</tr>

пытаюсь найти id td.

рони 19.06.2018 21:51

DarkSouls,
... информации недостаточно, сделайте рабочий пример с вашей проблемой. сейчас это обрывки кода, что такое sett, почему строка 5 у вас, то работает все это вставляется; то не работает пытаюсь найти id td.

laimas 19.06.2018 22:13

DarkSouls,
и если найти родителя ячейки (tr), по которой щелкаем, то почему $(elem).parent().parent('tr'), если $(elem) - это ячейка, а родитель ее это parent()?

DarkSouls 20.06.2018 18:23

Спасибо! parents() работает. ручки у меня просто кривые... сори!...


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