Можно перенаправить HTML якоря, используя JavaScript / jQuery? - PullRequest
0 голосов
/ 26 января 2020

В настоящее время я работаю над сайтом, который имеет несколько устаревших форматов коротких ссылок. Один из них особенно проблематичен c, поскольку он ссылается на HTML якорей, которые больше не существуют (в частности, номера абзацев, использующие id без начальных нулей). Формат new имеет номера пунктов с начальными нулями; в то время как это делает вещи предсказуемыми, оно также ломает старые короткие ссылки.


Пример

Старая короткая ссылка: https://example.org/?AC_I_1

Намеченная цель: https://example.com/augsburg-confession/article-i/#ac -i-0001


Перенаправление из старого формата в новый является относительно тривиальным, но регулярное выражение займет один только пока. В этом случае проблема заключается в том, что значения привязки не отправляются на сервер и поэтому не могут быть переписаны / перенаправлены. Вместо этого явно необходимо решение на стороне клиента (например, JavaScript).

Цель

Таким образом, цель состоит в том, чтобы иметь все номера абзацев (то есть HTML * 1028). * s) с меньшим , чем четыре цифры, перенаправленные на их 4 git эквиваленты (например, /#1 >> #0001).


В поиске способ достижения sh этого, я наткнулся на этот ответ , который кажется хорошим началом, но я не уверен, как изменить его, чтобы учесть номера абзацев.

1 Ответ

1 голос
/ 26 января 2020

Вы можете изменить число, чтобы иметь начальные нули, например:

("0000" + number).slice(-4)

Затем вы можете получить число в старом href и добавить начальные нули:

("0000" + oldLink.href.replace("https://example.org/?AC_I_", "")).slice(-4)

В чтобы изменить на новый формат, новый href должен выглядеть примерно так:

"https://example.com/augsburg-confession/article-i/#ac-i-" + ("0000" + oldLink.href.replace("https://example.org/?AC_I_", "")).slice(-4) 

Итак, чтобы изменить все старые якоря, получите их после загрузки селектором запроса:

let oldLinks = document.querySelectorAll("a[href^='https://example.org/?AC_I_']");

И используйте forEach для изменения href:

oldLinks.forEach(function (oldLink) {
  oldLink.href = "https://example.com/augsburg-confession/article-i/#ac-i-" + ("0000" + oldLink.href.replace("https://example.org/?AC_I_", "")).slice(-4) 
})

С некоторыми ссылками в качестве примера:

let oldLinks = document.querySelectorAll("a[href^='https://example.org/?AC_I_']");
console.log("anchors before change:", oldLinks)
oldLinks.forEach(function (oldLink) {
  oldLink.href = "https://example.com/augsburg-confession/article-i/#ac-i-" + ("0000" + oldLink.href.replace("https://example.org/?AC_I_", "")).slice(-4) 
})
console.log("anchors after change:", oldLinks)
<p><a href="https://example.org/?AC_I_1" rel="nofollow noreferrer">https://example.org/?AC_I_1</a><p/>
<p><a href="https://example.org/?AC_I_2" rel="nofollow noreferrer">https://example.org/?AC_I_2</a><p/>
<p><a href="https://example.org/?AC_I_3" rel="nofollow noreferrer">https://example.org/?AC_I_3</a><p/>
<p><a href="https://example.org/?AC_I_4" rel="nofollow noreferrer">https://example.org/?AC_I_4</a><p/>
<p><a href="https://example.org/?AC_I_5" rel="nofollow noreferrer">https://example.org/?AC_I_5</a><p/>
<p><a href="https://example.org/?AC_I_10" rel="nofollow noreferrer">https://example.org/?AC_I_10</a><p/>
<p><a href="https://example.org/?AC_I_50" rel="nofollow noreferrer">https://example.org/?AC_I_50</a><p/>
<p><a href="https://example.org/?AC_I_213" rel="nofollow noreferrer">https://example.org/?AC_I_213</a><p/>
<p><a href="https://example.org/?AC_I_3204" rel="nofollow noreferrer">https://example.org/?AC_I_3204</a><p/>

Надеюсь, это поможет!

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