2

ドロップダウン選択メニューを使用して、Web サイトのフィールドの「タイムゾーン」を変更するための JavaScript を作成しました。

ここでスクリプトを見ることができます: http://jsfiddle.net/dTb76/14/

しかし、私が知っている方法の限界に達しました。スクリプトでいくつかの「時間」フィールドを変更する必要がありますが、現時点では 1 つのフィールドでしか機能しません。

私は何日もどのような変更を加えるべきかを理解しようとしてきましたが、あまり運がありませんでした. 私が知る限り、ある種の「foreach」ステートメントが必要であり、各フィールドの元の時間を保存し、選択で選択されたものによって変更するように指示しますが、jQuery/javascriptでそれを実装する方法がわかりません.

助けていただければ幸いです。

4

2 に答える 2

1

jQuery のメソッドを使用して、各要素each()を反復処理する必要があります。.timeこれにより、特定の要素ごとに現在の時間を取得し、要素ごとに計算を行うことができます。それ以外の場合、$('.time').text()そのようなものは常に、選択された最初の要素の値を返します。これが表示されているものです。

これで始められるはずです:

    $('#modTime').change(
        function(){

        var modifyBy = parseInt($(this).val(),10);  // Here, this refers to your select element, the element whose change event handler we're now in

        $('.time').each(function(){ // each() iterates through each .time element found in the DOM individually; that's what you'd like to do
            var $this = $(this), // Refers to the current .time element
                curTime = $this.text(),
                curTimeHH = parseInt(curTime.split(':')[0],10),
                curTimeHH = parseInt(curTime,10) + modifyBy;                

            $this.attr('originalTime',curTime);
            if (curTimeHH == 0) {
                $this.text('24:00');
            } else if (curTimeHH > 24) { 
                 curTimeHH = curTimeHH - 24;
                 $this.text('0'+curTimeHH + ':00');
            } else if (curTimeHH < 0) {
                curTimeHH = curTimeHH + 24;
                $this.text(curTimeHH + ':00');
            } else { 
            $this.text(curTimeHH + ':00');
             }                    
        });            
    });
于 2012-05-23T13:46:07.983 に答える
1

$.each JQuery 関数を使用するだけです。

$('#modTime').change(function() {

    var times = $('.time');

    $.each(times, function(index, value) {

        var curTime = $(value).text();

        curTimeHH = parseInt(curTime.split(':')[0],10);

        $(value).attr('originalTime', curTime);

        var modifyBy = parseInt($('#modTime').val(),10);

        curTimeHH = parseInt(curTime,10) + modifyBy;

        if (curTimeHH === 0) {
            $(value).text('24:00');
        } else if (curTimeHH > 24) { 
            curTimeHH = curTimeHH - 24;
            $(value).text('0'+curTimeHH + ':00');
        } else if (curTimeHH < 0) {
            curTimeHH = curTimeHH + 24;
            $(value).text(curTimeHH + ':00');
        } else { 
            $(value).text(curTimeHH + ':00');
        }                
    });        
});​

編集:

すべてのフィールドの「元の時間」を取得するには、次のようにします。

    var times = $('.time');

    $.each(times, function(index, value) {

        var originalTime = $(value).attr('originalTime');
        ...
    });     
于 2012-05-23T13:46:23.607 に答える