Javascript string.slice() 为负值

Javascript string.slice() with negative values

我正在尝试根据页面标题隐藏或显示 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 文件中还有一个带有页面标题的 header。 %%GLOBAL_PageTitle%% 在我无权访问的服务器端代码中被替换。但是,这些值将是“100 美元费用”(具有不同的数字)。

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

最后,我有一组隐藏的 divs,id 的格式为 descr + 数字,所以如果页面标题是“100 美元费用”,我想显示 div ID "descr100".

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

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

编辑:将 togglePayLink 函数更改为使用 var 而不是字符串,但是在调用 slice() 时出现类型错误。

问题出在这里:

String title = h1Array[i].innerHTML;

在Javascript中,所有变量都用var设置(函数除外,可以用其他方式设置)。所以它会是:

var title = h1Array[i].innerHTML;

此外,您可能必须在 for 循环之外定义它,在这种情况下,当您在 for 循环中设置它时,您将省略 "var":

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

编辑:如果你只在for循环中使用它,但在不同的迭代中使用它,那么我不确定它是否可以在本地定义。不过,我仍然会在全球范围内定义它。

今后,您可能应该使用 %%GLOBAL_PageTitle%% 为页面分配一个唯一的 class。这样您就可以使用 CSS show/hide 个元素。

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

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

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+'');

你的做法有点过头了,如果是别人这样设置的,我理解。

title.slice(-4) 给了我字符串的最后四位数字,而不是我想的最后四位数字之前的所有内容。切换不存在的 'descrFee' div 没有做任何事情。