Идентификатор Javascript, извлеченный из строки, не работает - PullRequest
0 голосов
/ 01 мая 2018

Вот ситуация:

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 и извлекает идентификатор элемента с помощью создание массива и ссылка на последний.
  3. Пока все хорошо.
  4. Затем я использую это для ссылки на идентификатор элемента, чтобы получить его позицию.
  5. Но это не работает.
  6. Предупреждение STR указывает правильное значение, когда оно находится над POS, а не под. Сценарий вообще не работает ниже этой точки при использовании ссылки на переменную STR.
  7. Однако, если я сделаю прямую ссылку на идентификатор ('A01'), проблем не будет.

Почему одно работает, а не другое, когда оба значения идентичны? Я пробовал другие способы, такие как использование хеша вместо запятой и может извлечь значение, которое с помощью .location.hash, но это тоже не работает.

1 Ответ

0 голосов
/ 01 мая 2018

Проблема в том, что когда вы делаете

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

вы помещаете все после , в переменную CSV. Но между запятой и 'A01' есть пробел. Итак, переводчик уменьшает его до:

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

Но ваш идентификатор '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'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...