代码之家  ›  专栏  ›  技术社区  ›  dragoncmd

Javascript字符串。带负值的slice()

  •  0
  • dragoncmd  · 技术社区  · 10 年前

    我试图根据页面标题隐藏或显示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>
    

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

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

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

    编辑:将togglePayLink函数更改为使用var而不是字符串,但当调用slice()时,我得到一个typeError。

    3 回复  |  直到 10 年前
        1
  •  1
  •   thannes    10 年前

    接下来,您可能应该使用%%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+'');
    

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

        2
  •  0
  •   Feathercrown    10 年前

    问题在于:

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

        3
  •  0
  •   dragoncmd    10 年前

    标题slice(-4)给我的是字符串的最后四位数字,而不是我想象中的最后四位数之前的所有内容。切换不存在的“descrFee”div没有任何作用。