具有负值的Javascript字符串.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文件中还有一个带有页面标题的标题。%%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没有任何作用。
- 如何在JavaScript中将字符串转换为函数引用
- jQuery中是否内置了任何字符串格式化函数
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- ng打开空字符串
- 正则表达式在字符串中找到base64
- 如何将字符串值从php页面发送到java脚本页面
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 对id以某个字符串开头的元素进行计数
- Javascript逻辑运算符和字符串/数字
- 反向字符串比较
- 如何有效地将游戏数据存储在URL查询字符串中
- 可变大小的JavaScript字符串如何成为基元类型
- 将DOM节点值与字符串Javascript进行比较
- 如何在 Javascript 中将变量的值从字符串转换为整数
- 本地存储中的字符串到字节数组转换
- 具有负值的Javascript字符串.slice()
- 像slice substring和substr这样的字符串操作函数从字符串中删除了空格
- 扩展slice为数组中包含字符串'NN'的第一个元素
- javascript函数字符串slice