具有负值的Javascript字符串.slice()

Javascript string.slice() with negative values

本文关键字:字符串 slice Javascript      更新时间:2023-09-26

我试图根据页面标题隐藏或显示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费"(使用不同的数字)。

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

最后,我有一组隐藏的div,id的格式是descr+数字,所以如果页面标题是"$100 Fee",我想显示id为"descr100"的div。

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

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

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

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

问题就在这里:

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循环中使用它,但在不同的迭代中使用,那么我不确定它是否可以在本地定义。不过,我仍然会在全球范围内定义它。

title.slice(-4)给了我字符串的最后四位数字,而不是像我想象的那样给了我最后四位之前的所有数字。切换不存在的"descrFee"div没有任何作用。