2

私の新しい問題を検討してくれたすべての人に感謝します。jQueryを使用してテーブルを反復処理し、ハードコードされたすべての日付を配列にキャプチャしています。それらの日付をDate.today();と比較します。.isAfter()関数を使用します。ハードコードされた日付が過去の場合は、.css( "display"、 "none");を取得する必要があります。

<table>
    <html>
      <table>
        <tr class="gig">

           <td class="gigDate">Mar 27 2013</td>
           <td>the Saloon</td>
           <td>Atlanta, Ga</td>
           <td>$20 (2 passes)</td>
            <td>button to purchase tix<td>
        </tr>

        <tr class="gig"><td class="gigDate"> ... date2 ..</td></tr>
        <tr class="gig"><td class="gigDate"> ... date3 ..</td></tr>
        <tr class="gig"><td class="gigDate"> ... date4 ect ..</td></tr>
  </table>

<script type="text/javascript">
$("document").ready( function() {

var stringDate = []; //create array to hold elements

var now = Date.today(); // create current date

$('.gigDate').each(function (i, e) {   //adds hardcoded dates to array
stringDate.push($(e).text());
});

for(var y = 0; y < stringDate.length; y++){
var singleDate =  Date.parse(stringDate[y]);  //parse to milliseconds
var compare = now.isAfter(singleDate);        //compare to today's date

if(compare){
    $('.gig').css("display", "none");   //hide <tr class="gig"> 
                                      //if in the past
      }
}    
 });
</script>

ループロジックは適切に機能しているように見えますが、スタイルdisplay:noneを追加するif(ステートメント)は機能しません。どんな助けでも大歓迎です。


このisAfter関数についてはわかりませんが、日付を直接比較できます。それは簡単だと思います。

4

4 に答える 4

0

クライアント側をフィルタリングしている理由はありますか?非効率のようです。HTMLはハードコーディングされていますか、それともサーバーサイドスクリプトがありますか?他に選択肢がない場合を除いて、実際にはレンダリング前に結果をフィルタリングする必要があります。

于 2013-03-26T22:50:39.423 に答える
0

1つの行を非表示にしようとすると、すべての行が非表示になります。$('。gig')は、必要と思われる行だけでなく、すべての行を選択します。

日付をテストするループ内にロジックを移動します。大まかにこのように(私はあなたのコードをできるだけ変更していませんが、それでも機能しない可能性があり、チェックしていません):

var now = Date.today(); // create current date

$('.gigDate').each(function (i, e) {   //adds hardcoded dates to array
   var current = ($(e).text());
   var singleDate =  Date.parse(current);  //parse to milliseconds
   var compare = now.isAfter(singleDate);        //compare to today's date
   if(compare){
       // we want to hide the parent of td, not the td:
       $(e).parent().css("display", "none");   //hide <tr class="gig"> 
                                      //if in the past
   }

});
于 2013-03-26T22:54:08.030 に答える
0

比較が機能したとしても、クラス「gig」で何かを隠すことになります。

文字列から新しいDate(xxxxxxx)を作成することで、これを単純化できます。次に、「<」演算子を使用して比較できます。

ギグの日付がイベントの日付と同じ形式であると仮定します。

var now = new Date(); // create current date    
$('.gigDate').each(function (i, e) { 
    ele = $(this).html();
    gigDate = new Date(ele);
    if (gigDate<now){
        $(this).hide();
    }

});

あなたはそれがここで働いているのを見ることができます:

http://jsfiddle.net/skelly/vzH8U/

于 2013-03-26T23:04:24.450 に答える
0

この isAfter 関数についてはわかりませんが、日付を直接比較できます。その方が簡単だと思います。

于 2013-03-26T22:48:06.900 に答える