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 回答