簡體   English   中英

搜索/替換循環出錯

[英]Search/replace loop goes awry

我們有一個課程表,類似於東部時間的以下內容(前4行)。

Sat 12/08/2012  1:00-3:30 PM
Mon 12/10/2012  9:30-12:00 AM
Wed 12/12/2012  9:30-12:00 AM
Sat 12/15/2012  1:00-3:30 PM

您可以檢查單選按鈕並選擇其他時區。 例如,如果選擇“中部時間”,則應在更改時看到:

Sat 12/08/2012  12:00-2:30 PM
Mon 12/10/2012  8:30-11:00 AM
Wed 12/12/2012  8:30-11:00 AM
Sat 12/15/2012  12:00-2:30 PM 

相反,您看到:

Wed 30/05/2012  8:09 am-11:09 pm
Sat 00/08/2012  12:09-2:09 pm
Mon 30/10/2012  8:09 am-11:09 pm
Wed 30/12/2012  8:09 am-11:09 pm

其中的一部分可能是日期格式問題,但是該格式在其他地方可以正常使用。 我認為主要問題在於更改循環(每個循環),它抓住了每一行的三段內容(0 =日期,1 =日期,2 =時間(實際上,它被分為0和1的子數組,用於開始和結束時間,並且有一個特殊的午夜時間))將時移應用於新時區,並建立新的行內容。 我找不到問題所在。 任何想法表示贊賞。 (省略了init vars和其他重要內容):

$('.timezoneSel').click(function (evtObj) {
    _curevtObj = evtObj;
    _prevtmzObj = _curtmzObj;
    $('input.timezoneSel[value="' + _curevtObj.target.value + '"]').each(function () {
        $(this).attr('checked', true);
    });
    for (var x = 0; x < timezoneset.length; x++) if (timezoneset[x].abbr == _curevtObj.target.value) _curtmzObj = timezoneset[x];
    $('table.TPR_tblcoursedetails').each(function (i, val) {
        $(this).contents().find('tr').each(function (irow, vrow) {
            isEvening = false;
            $(this).contents().find('span').each(function (icol, vcol) {
                switch (icol) {
                    case 0:
                        rowwday = vcol.innerHTML;
                        break;
                    case 1:
                        rowdate = vcol.innerHTML;
                        break;
                    case 2:
                        rowtime = vcol.innerHTML;
                        break;
                }
            });
            isEvening = ((rowtime.indexOf(" PM") > -1) ? true : false);
            rowtimearr = rowtime.split("-");
            if (rowtimearr[0] == MidNiteStr) rowtimearr[0] = "12:00 AM";
            if (rowtimearr[1] == MidNiteStr) rowtimearr[1] = "12:00 AM";
            if (rowtimearr[0].indexOf(" AM") < 0 && rowtimearr[0].indexOf(" PM") < 0) rowtimearr[0] += isEvening ? " PM" : " AM";
            newStartDate = new Date(rowdate + ' ' + rowtimearr[0]);
            newEndDate = new Date(rowdate + ' ' + rowtimearr[1]);
            newStartDateMsec = newStartDate.getTime() + ((_curtmzObj.offset - _prevtmzObj.offset) * msecPerHour);
            newEndDateMsec = newEndDate.getTime() + ((_curtmzObj.offset - _prevtmzObj.offset) * msecPerHour);
            newStartDate = new Date(newStartDateMsec);
            console.log(newStartDate);
            newEndDate = new Date(newEndDateMsec);
            $(this).contents().find('span').each(function (icol2, vcol2) {
                adjStartTimeTT = newStartDate.format('tt');
                adjEndTimeTT = newEndDate.format('tt');
                console.log(adjStartTimeTT, adjEndTimeTT);
                switch (icol2) {
                    case 0:
                        vcol2.innerHTML = newStartDate.format("ddd");
                        break;
                    case 1:
                        vcol2.innerHTML = newStartDate.format("MM/dd/yyyy");
                        break;
                    case 2:
                        vcol2.innerHTML = ((adjStartTimeTT == adjEndTimeTT) ? newStartDate.format("h:mm") : newStartDate.format("h:mm tt")) + "-" + ((useMidNite && newEndDate.format("h:mm tt") == "12:00 AM") ? MidNiteStr : newEndDate.format("h:mm tt"));
                        break;
                }
            });
        });
        filledonce = false;
    });

好的,結果是這一行:

$('.TPR_tblcoursedetails').html($('.TPR_tblcoursedetails').html().replace(/ EST/g, ""));

在主循環之上的循環本身並沒有循環。 它只是抓住了一次EST,並在整個過程中進行了替換,但這也使下面的大循環執行相同的操作,因此交互不正確。 我們將其更改為:

$('.TPR_tblcoursedetails').each(function(iobj,vobj){
                vobj.innerHTML.replace(/ EST/g, "");
            });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM