6

eBay 用のテンプレートをコーディングしています。ただし、eBay は .replace を許可していません。以下のコードは、ロールオーバー タブ セクションのコードです。ユーザーがタブ (a) にカーソルを合わせると、対応する div div(a) が表示されるようになります。

.replace を使用せずにコードを動作させるための回避策はありますか?

var divs = new Array();
divs.push("contentPayment");
divs.push("contentShipping");
divs.push("contentWarranty");
divs.push("contentContact");
var navs = new Array();
navs.push("nav1");
navs.push("nav2");
navs.push("nav3");
navs.push("nav4");
///////////////////////////////////////


function hasClass(element, cls) {
    return (' ' + element.className + ' ').indexOf(' ' + cls + ' ') > -1;
}
///////////////////////////////////////////////////////////////////////


function toggleDisplay(id) {
    for (var i = 0; i < divs.length; i++) {
        var item = document.getElementById(divs[i]);
        item.style.display = 'none';
    }
    var target = document.getElementById(id);
    target.style.display = 'block';
    /////////////////////////////////////////////////////////////////////////////////////////////////////// 
    ////////////////////////////PAYMENT IS HOVERED////////////////////////////////////////////////////////
    if (id == "contentPayment") {
        var CurrentTab = document.getElementById("nav1");
        var AlreadyActive = hasClass(CurrentTab, "tabActive");
        if (AlreadyActive === false) {
            for (var i = 0; i < navs.length; i++) {
                var otherTabs = document.getElementById(navs[i]);
                otherTabs.className = otherTabs.className.replace(' tabActive', '');
            }
            CurrentTab.className += " " + "tabActive";
        }
    }

    /////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////Shipping IS HOVERED////////////////////////////////////////////////////////
    if (id == "contentShipping") {
        var CurrentTab = document.getElementById("nav2");
        var AlreadyActive = hasClass(CurrentTab, "tabActive");
        if (AlreadyActive === false) {
            for (var i = 0; i < navs.length; i++) {
                var otherTabs = document.getElementById(navs[i]);
                otherTabs.className = otherTabs.className.replace(' tabActive', '');
            }
            CurrentTab.className += " " + "tabActive";
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////Warranty IS HOVERED////////////////////////////////////////////////////////
    if (id == "contentWarranty") {
        var CurrentTab = document.getElementById("nav3");
        var AlreadyActive = hasClass(CurrentTab, "tabActive");
        if (AlreadyActive === false) {
            for (var i = 0; i < navs.length; i++) {
                var otherTabs = document.getElementById(navs[i]);
                otherTabs.className = otherTabs.className.replace(' tabActive', '');
            }
            CurrentTab.className += " " + "tabActive";
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////Contact IS HOVERED////////////////////////////////////////////////////////
    if (id == "contentContact") {
        var CurrentTab = document.getElementById("nav4");
        var AlreadyActive = hasClass(CurrentTab, "tabActive");
        if (AlreadyActive === false) {
            for (var i = 0; i < navs.length; i++) {
                var otherTabs = document.getElementById(navs[i]);
                otherTabs.className = otherTabs.className.replace(' tabActive', '');
            }
            CurrentTab.className += " " + "tabActive";
        }
    }
}
4

2 に答える 2

4

replace関数の代替としてこれを試すことができます

String.prototype.fakeReplace = function(str, newstr) {
    return this.split(str).join(newstr);
};

var str = "Welcome javascript";
str = str.fakeReplace('javascript', '');
alert(str); // Welcome

デモ

于 2012-10-07T15:32:48.380 に答える
2

より効率的ですが、少し長い方法については、次を使用してください。

String.prototype.myReplace = function(pattern, nw) {
   var curidx = 0, len = this.length, patlen = pattern.length, res = "";
   while(curidx < len) {
       var nwidx = this.indexOf(pattern, curidx);
       console.log(nwidx);
       if(nwidx == -1) {
           break;
       }
       res = res + this.substr(curidx, nwidx - curidx);
       res = res + nw;
       curidx = nwidx + patlen;
   }
   return res;
};
alert("Glee is awesome".myReplace("awesome", "very very very awesome"));

実際の動作をご覧ください:小さなリンク

お役に立てば幸いです。

于 2012-10-08T09:55:45.287 に答える