我正在尝试根据页面标题隐藏或显示div。这仅是必需的,因为我无法找到将值传递到页面的更好的方法。

这是HTML文件中的当前代码:

function toggle(divId) {
    var divArray = document.getElementsByTagName("div");
    for(i = 0; i < divArray.length; i++){
        if(divArray[i].id == divId){
            if(divArray[i].style.display != 'none'){
                divArray[i].style.display = 'none';
            }else{
                divArray[i].style.display = '';
            }
        }
    }
}

    function togglePayLink() {
    var h1Array = document.getElementsByTagName("h1");
    for(i = 0; i < h1Array.length; i++){
        if(h1Array[i].id == 'Title'){
            var title = h1Array[i].innerHTML;
            title = title.slice(1);
            title = title.slice(-4);
            toggle('descr'+ title);
        }
    }
}


HTML文件中还有带有页面标题的标题。我无法访问的服务器端代码中替换了%% GLOBAL_PageTitle %%。但是,值将为“ $ 100 Fee”(用不同的数字)。

<h1 id="Title" class="TitleHeading">%%GLOBAL_PageTitle%%</h1>


最后,我有一组ID为descr +数字的隐藏div,因此,如果页面标题为“ $ 100 Fee”,我想显示ID为“ descr100”的div。

<div id="descr100" style="display:none;width: 75%;"></div>


当上面的脚本运行时,我没有收到任何错误(我正在使用chrome的控制台),但是div却没有显示。我知道切换功能是可行的,因为它以前仅与页面上的单个div一起使用,因此必须进行切换。我编写了togglePayLink函数,我认为这是问题所在,但是我不知道如何调试它。我想知道标题中的美元符号是否可能引起问题,但我想如果真是这样,我会得到一个错误。

编辑:更改了togglePayLink函数以使用var而不是字符串,但是调用slice()时出现typeError。

最佳答案

展望未来,您可能应该只使用%% GLOBAL_PageTitle %%为页面分配一个唯一的类。这样,您可以使用CSS显示/隐藏元素。

<div class="page %%GLOBAL_PageTitle%%">


对于BigCommerce无法为每个单独页面(例如网页,帐户,购物车)访问h1的HTML的页面,我通常在页面加载时运行此脚本以去除页面标题的空格和其他字符,并且为页面元素分配特定的类。

var catName = $('.TitleHeading').text();
var catName = catName.replace(/ /g, '');
var catName = catName.replace(/'/g, '');
var catName = catName.replace(/&/g, '');
var catName = $.trim(catName);
$('.page').addClass(''+catName+'');


您的操作方式似乎有点过头,但是如果其他人以这种方式设置它,我就会理解。

关于javascript - 带有负值的Javascript string.slice(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36993971/

10-11 23:35
查看更多