Почему свойство 'match' не определено?(Добавление строк запроса к ссылкам на страницы) - PullRequest
0 голосов
/ 15 мая 2018

Я знаю, что есть много похожих вопросов, связанных с Uncaught TypeError: Cannot read property 'match' of undefined, но у меня просто нет большого успеха в поиске решения в какой-либо из них специально для моей проблемы.

Цель этого сценария - взять URL текущей страницы, использовать регулярное выражение для фильтрации строки запроса, найти все ссылки на странице, оценить, содержат ли они ?, и соответственно добавить строку запроса.

Я успешно провел тестирование на CodePen, однако, когда я реализовал скрипт на веб-странице, он не прошел и вернул Uncaught TypeError в консоли.

$(document).ready(function(){
    var myRegexp = /\?([^]*)/gm;
    var string_match = myRegexp.exec(window.location.href);

    $('a').each(function(){
        var href = $(this).attr('href');
        href += (href.match(/\?/) ? '&' : '?') + string_match[1];
        $(this).attr('href', href);
    });
});

Ошибка помечается на .match(/\?/) ? '&' : '?') + string_match[1];, так что я ... просто потерян в этот момент. Почему это работает только на игровых площадках кода?

Исходный код, который я модифицировал, пришел от здесь .
См. Код, работающий с CodePen здесь .

Любая помощь очень ценится, спасибо!

1 Ответ

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

Похоже, оценка произошла на неопределённом href. Может быть, вы захотите установить защитное кодирование, чтобы проверить, верен ли href, а затем оценить соответствие на нем. ИЛИ вы можете просто вернуться к неопределенному href и ничего не делать.

$(document).ready(function(){
    var myRegexp = /\?([^]*)/gm;
    var string_match = myRegexp.exec(window.location.href);

    $('a').each(function(){
        var href = $(this).attr('href');
        href += href && (href.match(/\?/) ? '&' : '?') + string_match[1];
        $(this).attr('href', href);
    });
});
...