JQuery toggle-Zeilen klicken
Ich versuche zu verstecken/zeigen, eine Teilmenge der Zeilen, wenn Sie auf eine Zeile mit einer bestimmten id.
Durch viel recherche im web und eine Menge versucht, ich habe den folgenden code ein.
Einzige problem ist dieser code für einige Grund nur versteckt/zeigt die ersten Zeilen.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Test</title>
<script src="http://code.jquery.com/jquery-1.5.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function()
{
$('#rowToClick').click(function ()
{
$(this).nextAll('tr').each( function()
{
if ($(this).is('#rowToClick'))
{
return false;
}
$(this).toggle();
});
});
});
</script>
</head>
<body>
<table>
<tr id="rowToClick"><td>ClickMe</td></tr>
<tr id="Tr1"><td>Toggled</td></tr>
<tr id="Tr2"><td>Toggled</td></tr>
<tr id="Tr3"><td>Toggled</td></tr>
<tr id="Tr4"><td>Toggled</td></tr>
<tr id="Tr5"><td>Toggled</td></tr>
<tr id="rowToClick"><td>ClickMe</td></tr>
<tr id="Tr6"><td>Toggled</td></tr>
<tr id="Tr7"><td>Toggled</td></tr>
<tr id="Tr8"><td>Toggled</td></tr>
<tr id="Tr9"><td>Toggled</td></tr>
<tr id="Tr10"><td>Toggled</td></tr>
</table>
</body>
</html>
Jemand einen Vorschlag und/oder umschreiben des Codes?
---------- Update - Endgültige Lösung -----------
Landete ich mit die folgende Lösung basiert auf Brandon ' s input, wie ich wollte, mehr zu tun, Schachteln mit dem gleichen Verhalten, wie eine Art von reduzierbaren Struktur-Ansicht.
Leider, das bedeutete, ich musste ein zusätzliches Attribut zu verfolgen, der Staat, aber damit kann ich Leben, für jetzt, bis ich einen anderen Weg finden (BSP. überprüfen Sie die Sichtbarkeit der nächsten Zeile).
$(document).ready(function () {
toggleRows('.module','.namespace');
toggleRows('.namespace','.type');
toggleRows('.type','.member');
});
function toggleRows(parentClass,subClass)
{
$(parentClass).click(function () {
if( $(this).attr("value")=="collapsed")
{
$(this).attr("value","expanded");
$(this).nextUntil(parentClass).filter(subClass).toggle(true);
}
else
{
$(this).attr("value","collapsed");
$(this).nextUntil(parentClass).attr("value","collapsed");
$(this).nextUntil(parentClass).toggle(false);
}
});
}
Verwenden .Daten() statt .attr(). Seine mehr konform:
$(this).data("value")
und $(this).data("value", "expanded")
. Auch, Kette Ihre Anrufe zu vermeiden, das Scannen des DOM-2x: $(this).nextUntil(parentClass).data("value","collapsed").toggle(false);
InformationsquelleAutor Christian Mikkelsen | 2011-03-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersten, können Sie nicht mehrere Zeilen mit der gleichen id. Statt die id zu "rowToClick", setzen Sie die css-Klasse:
Weiter sollte diese Arbeit:
InformationsquelleAutor Brandon
dies ist, weil das id-Attribut kann nur verwendet werden, einmal für jede id in einem Dokument. sollten Sie mit dem class-Attribut statt, und dann in deinem jquery-code, der Zugriff auf die Elemente mit der Klasse rowToClick mit dem $(".rowToClick") Selektor.
Hoffe, das hilft.
Andy
InformationsquelleAutor Andbdrew
Werfen Sie einen Blick bei dieser Geige
Mit der
:not()
- Selektor können Sie auswählen, alletr
Elemente, die nicht über die id/Klasse, die Sie wollen, herausgefiltert:Beachten Sie, dass Sie können nicht zwei Elemente mit demselben id - haben Sie zwei Zeilen mit der id
rowToClick
. Verwenden Sie eineclass
statt.InformationsquelleAutor no.good.at.coding
Ich glaube, das ist das gewünschte Verhalten:
InformationsquelleAutor Prisoner ZERO
Ich würde schalten Sie Ihren code so etwas wie dieses:
Dann, so etwas wie dieses:
InformationsquelleAutor Tejs
fügen Sie einige Infos darüber, wie Ihre Antwort funktioniert. es wird anderen helfen.
InformationsquelleAutor Gaston Nina