从字符串中提取的Javascript ID不起作用

时间:2018-05-01 03:54:43

标签: javascript arrays reference

情况如下:

function STP() { var LOC = window.location.href;
                 var CSV = LOC.substring(LOC.indexOf(',')+1);
                 var ARR = CSV.split(',');
                 var STR = ARR[ARR.length -1 ];
                 var POS = window.document.getElementById(STR).offsetTop;
                 alert( STR ); };

说明:

  1. 加载页面时,onload会调用脚本。
  2. 脚本获取location.href并提取元素ID 创建一个数组并引用最后一个数组。
  3. 到目前为止一直很好。
  4. 然后我用它来引用元素ID来获取它的位置。
  5. 但它不起作用。
  6. 当STR警报放在POS上方而不是下方时,它会显示正确的值。当使用STR var引用时,该脚本在该点之下根本不起作用。
  7. 但是,如果我直接引用ID('A01')没问题。
  8. 当两个值相同时,为什么一个工作而另一个工作而不是另一个?我尝试过其他方法,例如使用哈希而不是逗号,并且可以使用.location.hash提取值,但它也不起作用。

1 个答案:

答案 0 :(得分:1)

问题是当你做

LOC.substring(LOC.indexOf(',') + 1);

您将,后的所有内容放入CSV变量中。但是逗号和'A01'之间有一个空格。因此,解释器将其缩减为:

var POS = window.document.getElementById(' A01').offsetTop;

但您的ID为'A01',而非' A01',因此选择器失败。



function STP() {
  var LOC = 'file:///M:/Transfers/Main%20Desktop/Export/USI/2018/Catalog/CAT-Compilations-01a.htm?1525149288810, A01';
  var CSV = LOC.substring(LOC.indexOf(',') + 1);
  var ARR = CSV.split(',');
  var STR = ARR[ARR.length - 1];
  console.log(`'${STR}'`);
}
STP();




要解决此问题,您可以将索引增加一个:

LOC.substring(LOC.indexOf(',') + 2);

但最好不要在不需要的时候在URL中添加空格 - 如果可能,请将用户改为'file:///M:/Transfers/Main%20Desktop/Export/USI/2018/Catalog/CAT-Compilations-01a.htm?1525149288810,A01'