2009-09-15 4 views
0

J'ai un code qui ressemble à ceci:javascript: Comment masquer les DIV/UL représentant des dates antérieures?

<h3>Thursday Sep 10</h3> 
<ul>great stuff in here</ul> 

<h3>Friday Sep 18</h3> 
<ul>other stuff in here</ul> 

Ils ont une chose hidey-voyantes jQuery de base qui se passe: cliquez sur le H3, et l'UL ou sous contrat étend. Par défaut, ils sont tous affichés/ouverts.

Je voudrais le configurer de sorte que toute date passée (comme le 10 septembre dans cet exemple) soit contractée par défaut.

Je ne semble pas être en mesure d'obtenir mon CMS pour cracher une belle date comparable (comme le temps de l'époque) à utiliser comme ID pour le H3. Y a-t-il un moyen d'utiliser la fonction Date() de js pour construire quelque chose comme ça à partir des informations existantes ("Jeudi 10 Septembre"), ou d'une autre manière entièrement pour y arriver?

(Toutes les dates sont en 2009 et le site ne sera pas exister en 2010, l'année hardcoding donc dans toutes les fonctions est OK si c'est ce qui doit être fait.)

Merci!

Répondre

2

Le premier problème consiste à convertir vos dates de texte en chaînes valides pouvant initialiser des objets de date JavaScript. Le processus de conversion (y compris les formats de chaîne valides) est couvert par http://programming.top54u.com/post/Javascript-Convert-String-to-Date.aspx. Malheureusement, vos représentations de texte ne sont pas des entrées valides pour le constructeur de date JavaScript. Vous devrez écrire une fonction pour convertir vos chaînes en une représentation valide avant de les utiliser dans le constructeur Date. Une fois les objets Date initialisés, vous pouvez les comparer (voir "Comparer deux dates" sur http://www.w3schools.com/jS/js_obj_date.asp).

+0

Vous n'avez pas vraiment besoin de convertir les chaînes en dates pour les comparer. Cela rend le problème plus complexe. –

+0

Ouais, mais j'ai appris à la dure que chaque fois que j'essaie de faire quelque chose, la façon rapide et nouelle revient TOUJOURS me mordre plus tard. Donc, la façon complexe-n-correcte c'est! – Eileen

1

Je suis d'accord avec Mayo. Si vous aviez accès à la valeur de l'heure de la date et que vous vouliez la convertir en une chaîne similaire à celle que vous avez ("Jeudi 10 septembre"), vous pouvez utiliser this.

0

Restez simple; vous n'avez pas vraiment besoin d'un analyseur de date approprié pour comparer vos dates. J'ai le sentiment que vous cherchez quelque chose de rapide et sale:

var now = new Date(); 
var nowHash = now.getMonth() << 5 + now.getDate(); 

$("h3").each(function (e) { 
    var tokens = $(e).html().split(" "); 
    var hash = [ "Jan", "Feb", ..., "Dec" ].indexOf(tokens[1]) << 5 + tokens[2]; 

    if (hash < nowHash) { 
     // contract the <ul> that follows 
    } 
}); 

Mois * 32 (ou passer 5 bits à gauche) + jour est suffisant pour vous donner un hachage unique d'une date qui peut être comparé avec d'autres dates.

0

Mayo a raison de ne pas avoir un moyen rapide. Alors voici ma prise sur la solution de bricolage.

Fondamentalement, vous extrayez la date et comparez la date vous-même.


var aMonths = { "Jan":0, "Feb":1 ..., "Sep":8, ... }; 
var aToday = new Date(); 

var aH3Text = .....; // Get the value via jQuery 
var aDataElements = aH3Text.split(""); 
var aMonthIndex = aMonths[aDataElements[1]]; 
var aDateIndex = aDataElements[2]; 

var aH3Date = new Date(); 
aH3Date.setFullYear(2009, aMonthIndex, aDateIndex); 

if (aH3Date > today) { 
    // BEFORE today 
} else { 
    // AFTER today 
} 

Espérons que cela aide.

Questions connexes