Ensemble colspan de façon dynamique avec jquery
J'ai une simple structure de la table de ce genre. Ce que je voudrais faire est de les fusionner de manière dynamique des colonnes basée sur une condition au sein de la <td>
par exemple, si td1 et td3 sont vides, puis de fusionner les cellules et ne
<td class="col1" colspan="3">1Meeting</td>
J'ai essayé de jouer avec jquery en utilisant:
$(".tblSimpleAgenda td:contains('')").hide();
mais il n'avait pas l'effet.
Ce serait la meilleure façon à l'aide de jquery pour atteindre cet objectif.
<table class="tblSimpleAgenda" cellpadding="5" cellspacing="0">
<tbody>
<th align="left">Time</th>
<th align="left">Room 1</th>
<th align="left">Room 2</th>
<th align="left">Room 3</th>
<tr valign="top">
<td class="colTime">09:00 – 10:00</td>
<td class="col1"></td>
<td class="col2">Meeting 2</td>
<td class="col3"></td>
</tr>
<tr valign="top">
<td class="colTime">10:00 – 10:45</td>
<td class="col1">Meeting 1</td>
<td class="col2">Meeting 2</td>
<td class="col3">Meeting 3</td>
</tr>
<tr valign="top">
<td class="colTime">11:00 – 11:45</td>
<td class="col1">Meeting 1</td>
<td class="col2">Meeting 2</td>
<td class="col3">Meeting 3</td>
</tr>
</tbody>
</table>
Vous devez vous connecter pour publier un commentaire.
Comment sur
J'imagine que le travail, mais n'ont aucun moyen de test pour le moment. À l'aide de
.attr()
serait l'habitude de jQuery moyen de la définition des attributs d'éléments dans l'ensemble de fractionnement.Comme il a été mentionné dans une autre réponse, afin d'obtenir ce travail nécessiterait la suppression de la td éléments qui n'ont pas de texte en eux de la DOM. Il peut être plus facile de le faire tous les côté serveur
EDIT:
Comme il a été mentionné dans les commentaires, il y a un bug dans la tentative de définir colspan à l'aide attr() dans IE, mais les travaux suivants dans IE6 et FireFox 3.0.13.
Travail De Démonstration
notez l'utilisation de l'attribut
colSpan
et pascolspan
- l'ancien fonctionne dans IE et Firefox, mais ce dernier ne fonctionne pas dans IE. En regardant jQuery 1.3.2 source, il semblerait queattr()
tente de définir l'attribut comme une propriété de l'élément sicolSpan
existe en tant que propriété et la valeur par défaut 1 sur<td>
Élémentshtml dans IE et FireFox)à l'aide de
colSpan
par opposition àcolspan
fonctionne avecattr()
parce que l'ancien est une propriété définie sur l'élément tandis que le second ne l'est pas.l'automne pour
attr()
est d'essayer d'utilisersetAttribute()
sur l'élément en question, la définition de la valeur d'une chaîne de caractères, mais cela pose des problèmes dans IE (bogue #1070 en jQuery)Dans la démo, pour chaque ligne, le texte dans chaque cellule est évaluée. Si le texte est une chaîne vide, alors la cellule est supprimée et un compteur incrémenté. La première cellule de la ligne qui n'a pas
class="colTime"
a un attribut colspan la valeur du compteur + 1 (pour la durée qu'il occupe lui-même).Après ce, pour chaque ligne, le texte dans la cellule avec
class="colspans"
est définie pour l'attribut colspan valeurs de chaque cellule de la rangée de gauche à droite.HTML
jQuery code
C'est juste une démonstration pour montrer que
attr()
peut être utilisé, mais être conscient de la mise en oeuvre et de la croix-navigateur bizarreries qui viennent avec elle. J'ai aussi fait quelques hypothèses à propos de votre tableau de mise en page dans la démo (c'est à dire appliquer la colspan à la première de "non-Temps" cellule de chaque ligne), mais j'espère que vous obtenez l'idée.colSpan
vscolspan
juste sauvé ma vie 😉td.parent('tr').children('td').not(td)
peuvent être réduits àtd.siblings()
J'ai adapté le script de Russ Cam (merci, Russ Cam!) pour mes propres besoins: j'ai eu besoin de fusionner des colonnes qui avaient la même valeur, et pas seulement les cellules vides.
Cela pourrait être utile à quelqu'un d'autre... Voici ce que je suis venu avec:
Vous l'ai dit rowspan dans votre titre, mais j'ai l'impression que vous avez voulu dire colspan; toutes mes excuses si le dessous est éteint parce que j'ai que de mal.
Vous auriez besoin de retirer la cellule de tableau vide de l'élément entièrement, et de modifier l'attribut colspan sur une autre cellule dans la ligne d'englober l'espace dégagé, par exemple:
Notez que la configuration via setAttribute (qui autrement serait correct) ne fonctionne pas correctement sur IE.
Méfiez-vous: c'est à dire ne de très étranges disposition de table de choses quand vous bricolons avec colspans de façon dynamique. Si vous pouvez l'éviter, je le ferais.
J'ai trouvé aussi que si vous aviez display:none, puis par programmation changé pour être visible, vous pouvez également définir
plutôt que display:inline ou display:block sinon, la cellule peut seulement montrer que la prise en hausse de 1 cellule, peu importe comment grand vous avez le colspan défini.
td.setAttribute('rowspan',x);
Réglage
colspan="0"
est prise en charge par firefox.Dans d'autres navigateurs, nous pouvons obtenir autour d'elle avec:
http://tinker.io/3d642/4