LINUX.ORG.RU

[jquery]Дети соседей

 


0

1

На странице есть как минимум одна таблица, вида:
<table>
<tr><td>Заголовок</td></tr>
<tr><td><table>Данные</table></td></tr>
</table>

Проблем с обработкой собыий нет, пока на странице один экземпляр этой таблицы.
При появлении второго экземпляра обрабатываются лишь события таблицы, расположенной первой сверху.
Подскажите, пожалуйста, как в jQuery обратиться к <table>Данные</table> из <td>Заголовок</td>? Т.е. какой селектор использовать?
$(this)...?


Если есть второй и т.д. экземпляр таблицы, то и с <td>Заголовок</td> проблема, события не отрабатываются.
К <td>Заголовок</td> обращаюсь по содержанию имени:
$('td[name^=«parent_»]').click(function(). alert(this) при клике не работает.

tuxin
() автор топика

А если соответствующим элементам навесить классы и по ним обращаться, тоже не пашет?

Подскажите, пожалуйста, как в jQuery обратиться к <table>Данные</table> из <td>Заголовок</td>


Что значит «из»? Ты точно понимаешь, как жукверь работает?

Apple-ch ★★
()
Ответ на: комментарий от Apple-ch

Что значит «из»?

При клике на <td>Заголовок</td>.

tuxin
() автор топика

А предварительно воспользоваться parent()'ом несколько раз нельзя?

rival ★★
()
Ответ на: комментарий от Apple-ch

А если соответствующим элементам навесить классы и по ним обращаться, тоже не пашет?


Не пашет.

tuxin
() автор топика
Ответ на: комментарий от tuxin

Вот работающий пример. Размётка:

<table>
    <tr><td class="headline">Заголовок</td></tr>
    <tr><td><table class="inner-table" id="first"></table></td></tr>
</table>
<table>
    <tr><td class="headline">Заголовок</td></tr>
    <tr><td><table class="inner-table" id="second"></table></td></tr>
</table>
<table>
    <tr><td class="headline">Заголовок</td></tr>
    <tr><td><table class="inner-table" id="third"></table></td></tr>
</table>

Скрипт:

$("td.headline").click(function() {
        var $parent = $(this).parent().parent(),
               $table = $(".inner-table", $parent);
        alert($table.prop("id"));
});

Здесь мы по клику на клетку достукиваемся до нужной вложенной таблицы, задавая контекст, в котором надо искать. Оно?

Apple-ch ★★
()
Ответ на: комментарий от anonymous

Можно, но не думаю, что это хорошая идея: эти таблицы могут быть завёрнуты ещё в энное количество таблиц, появляется шанс заселектить лишние элементы :)

А дважды parent() гарантированно вытащит только то, что надо :)

Apple-ch ★★
()
Ответ на: комментарий от Apple-ch

Спасибо, код сам по себе рабочий. Но у меня, как оказалось, проблема другая.
События второго экземпляра таблицы не обрабатываются, несмотря на уникальные id, твой способ и т.д. Хотя, если эту таблицу вывести на отдельной странице, все будет работать.
Такое ощущение, что подгружаемый в <script></script> код не действует на второй и следующие экземпляры. Возможно, это потому, что они загружаются по требованию, после загрузки документа и document.ready не срабатывает.
Если так, то что же прописать в файле с js/jquery кодом, чтобы события обрабатывались? Сейчас там:

$(function () {
   $('td[name^=«parent_»]').click(function() {
...
      }
   });
   return false;
});

tuxin
() автор топика
Ответ на: комментарий от tuxin

Так ты создаёшь эти таблицы динамически, что ли?

Тогда используй live() или вручную навешивай обработчик после создания или добавления в dom.

Apple-ch ★★
()
Ответ на: комментарий от Apple-ch

Спасибо! По-моему то, что надо.

tuxin
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.