首页 > 解决方案 > 从字符串中提取的 Javascript ID 不起作用

问题描述

情况如下:

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') 没问题。

当两个值相同时,为什么一个有效而另一个无效?我尝试了其他方法,例如使用哈希而不是逗号,并且可以使用 .location.hash 提取值,但它也不起作用。

标签: javascriptarraysreference

解决方案


问题是当你这样做时

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

你把后面的所有东西都,放入CSV变量中。但逗号和 . 之间有一个空格'A01'。因此,解释器将其简化为:

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

但是您的 ID 是'A01', not ' 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'


推荐阅读