Я пытаюсь сделать таблицу, которая имеет строки заголовков, которые могут быть свернуты и развернуты при помощи jQuery. Вот полнота моего кода к настоящему времени:
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<link href="styles.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
$(document).ready(function() {
$("tr#cat1.header").click(function () {
$("tr#cat1.child").each(function() {
$(this).slideToggle("fast");
});
});
});
</script>
</head>
<body>
<table>
<tr id="cat1" class="header">
<td>Cat1</td>
<td>Row</td>
</tr>
<tr id="cat1" class="child">
<td>data1</td>
<td>data2</td>
</tr>
<tr id="cat1" class="child">
<td>data3</td>
<td>data4</td>
</tr>
<tr id="cat2" class="header">
<td>Cat1</td>
<td>Row</td>
</tr>
<tr id="cat2" class="child">
<td>data1</td>
<td>data2</td>
</tr>
</table>
</body>
</html>
Если я корректен, часть jQuery в английских чтениях как: "Когда строка, которая имеет идентификатор 'cat1' и класс 'заголовка', нажата, найдите все строки, которые имеют идентификатор 'cat1' и класс 'ребенка', и для каждого, slideToggle".
Все же, когда я выполняю его и нажимаю на строку заголовка, ничего не происходит. Понимание?
Править: Добавленный вторая категория к HTML-таблице. Извините, я должен был быть более конкретным. Я хочу смочь нажать на строку заголовка для конкретной категории и иметь только те дочерние строки коллапс, не все дочерние строки на странице. Таким способом таблица ведет себя как "accordian", и строки группируются по категориям.
Это приведет к тому, что клик коснется только строк в таблице, содержащей заголовок, на который вы кликнули, что означает, что вы можете изменить его для работы с классом css, вместо того, чтобы дублировать id.
$("tr#cat1.header").click(function () {
$("tr#cat1.child", $(this).parent()).slideToggle("fast");
});
В основном this
- это заголовок, который щелкнул, мы обернем его в объект jQuery и вызовем parent()
(который возвращает таблицу), а затем укажем его в качестве контекста для нового запроса.
Ваша страница теперь выглядит примерно так:
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script>
<link href="styles.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
$(document).ready(function() {
$("tr.header").click(function () {
$("tr.child", $(this).parent()).slideToggle("fast");
});
});
</script>
</head>
<body>
<table>
<tr class="header">
<td>Cat1</td>
<td>Row</td>
</tr>
<tr class="child">
<td>data1</td>
<td>data2</td>
</tr>
<tr class="child">
<td>data3</td>
<td>data4</td>
</tr>
</table>
<table>
<tr class="header">
<td>Cat1</td>
<td>Row</td>
</tr>
<tr class="child">
<td>data1</td>
<td>data2</td>
</tr>
<tr class="child">
<td>data3</td>
<td>data4</td>
</tr>
</table>
</body>
</html>
Во-первых, не следует дублировать идентификаторы строк. ID должны быть уникальными для каждого элемента на странице.
Также не следует использовать каждый
, так как jQuery автоматически применит функцию slideToggle
к каждому элементу, совпадающему с селектором. Я бы предложил отказаться от идентификаторов и использовать вместо них имена классов:
$("tr.header").click(function () {
$("tr.child").slideToggle("fast");
});
Если вы хотите убедиться, что только определенные таблицы могут выполнять эту функцию переключения, поместите класс на таблицу и обновите селекторы:
<table class="collapsible">
<tr>
<td>Cat1</td>
<td>Row</td>
</tr>
<tr>
<td>Collapsible</td>
<td>Row</td>
---
$(".collapsible tr:first").click(function () {
$(this).nextAll().slideToggle("fast");
});
Ответ Рори правильный, я просто расширяю его. Если вы используете несколько таблиц, вы можете удалить CSS-классы из и jQuery до: Разве не должно быть больше так? Обычно это весь документ.s в строках и упростить таблицы до:
<table class="collapsible">
<tr>
<td>Cat1</td>
<td>Cat1</td>
</tr>
<tr>
<td>Collapsible</td>
<td>Row</td>
</tr>
</table>
<table class="collapsible">
<tr>
<td>Cat2</td>
<td>Cat2</td>
</tr>
<tr>
<td>Collapsible</td>
<td>Row</td>
</tr>
</table>
$(".collapsible tr:first").click(function () {
$(this).nextAll().slideToggle("fast");
});
$("tr#cat1.header").click(function () {
$("tr#cat1.child").slideToggle("fast");
});
Похожие вопросы: