Удалить последнюю косую черту с якоря href - PullRequest
0 голосов
/ 01 мая 2019

У меня следующая якорная ситуация:

<a href="https://example.com/my-account/#example/" class="anchor">...</a>

Приведенный выше якорь вызывает конфликт jQuery из-за косой черты ссылки #. Поскольку это сгенерированный PHP, я ищу решение jQuery Javascript для удаления последнего символа href этого якоря. Как мне это сделать?

Причина этого конфликта jquery заключается в том, что # -ссылки на моем сайте являются и должны быть свойствами прокрутки до идентификатора. Так что прокручиваем до id-элемента. Это функциональная возможность, я не могу изменить способ ее сборки, поэтому единственное решение, которое я вижу, это удалить последний / из якоря.

Ответы [ 3 ]

1 голос
/ 01 мая 2019

Приведенный выше якорь вызывает конфликт jQuery из-за косой черты # -линка

Я бы посоветовал вам исправить этот конфликт, так как нет ничего плохого в том, чтобы во фрагменте URL было /. Если это вызывает у вас ошибку, вам нужно исправить свою логику.

При этом можно сделать то, что вам нужно, передав функцию prop(), которая удаляет любые косые черты с помощью регулярного выражения:

$('.anchor').prop('href', function(i, href) {
  return href.replace(/\/$/, '');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<a href="https://example.com/my-account/#example/" class="anchor">...</a>
0 голосов
/ 01 мая 2019

Если вам нужно изменить его на стороне Javascript, вы можете разбить строку, удалить последний элемент и снова присоединиться к нему ... (это предполагает, что последний символ ВСЕГДА будет /, вам понадобитсяпроверка работоспособности, если это не всегда так).

let href = $('.anchor').prop('href').split("");
href.pop();
href = href.join("");

console.log(href); 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="https://example.com/my-account/#example/" class="anchor">...</a>
0 голосов
/ 01 мая 2019

Вы можете использовать attr() метод с обратным вызовом, который перебирает элементы внутри, где обратный вызов содержит старое значение в качестве второго аргумента, и он будет обновляться с возвращенным значением.

$('.anchor').attr('href', (_, href) => href.slice(0, -1));

$('.anchor').attr('href', (_, href) => href.slice(0, -1));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="https://example.com/my-account/#example/" class="anchor">...</a>
...