Безошибочный способ определения активной ссылки в HTML на основе текущего URL в адресной строке - PullRequest
0 голосов
/ 30 ноября 2018

Ссылка в HTML может быть абсолютным или относительным путем
Может иметь параметры запроса или нет
Может иметь хэш или нет

Текущий URL также может быть /иметь что-нибудь

Существует ли безопасный / защищенный от ошибок способ JS, чтобы проверить, является ли ссылка в HTML «активной», сравнивая ее с текущим URL?

Я предполагаю, что некоторые регулярные выражения будут иметьдля использования на <a href> и еще один на address bar URL и сравнить их, но есть ли известный / стандартный способ успешного достижения этого?

Я хотел проверить, известно ли, что это ужеобречен на провал, прежде чем я действительно начну пробовать решения: D

Спасибо!

1 Ответ

0 голосов
/ 30 ноября 2018

Есть ли безопасный / защищенный от ошибок способ JS, чтобы проверить, является ли ссылка в HTML «активной», сравнивая ее с текущим URL?

Это зависит от того,хотите рассмотреть параметры запроса и / или хэш.

Относительная / абсолютная вещь не проблема, используйте элемент привязки 'href свойство (не атрибут), который будет разрешен (абсолютный).Или используйте различные отдельные части элемента привязки (protocol, host и т. Д.).К элементам привязки относятся HTMLHyperlinkElementUtils mixin :

interface mixin HTMLHyperlinkElementUtils {
  [CEReactions] stringifier attribute USVString href;
  readonly attribute USVString origin;
  [CEReactions] attribute USVString protocol;
  [CEReactions] attribute USVString username;
  [CEReactions] attribute USVString password;
  [CEReactions] attribute USVString host;
  [CEReactions] attribute USVString hostname;
  [CEReactions] attribute USVString port;
  [CEReactions] attribute USVString pathname;
  [CEReactions] attribute USVString search;
  [CEReactions] attribute USVString hash;
};

Если вы хотите включить параметры запроса и хэш, то

if (link.href === location.href)

Помните, что порядок параметров запроса может быть значительным.Часто не является значимым, и в этом случае приведенное выше не будет работать для «эквивалентных» URL, таких как http://example.com?foo=a&bar=b и http://example.com?bar=b&foo=a, если для этого ресурса относительный порядок foo и bar не имеет значенияВ этом случае вам нужно будет проанализировать параметры запроса и сравнить их так, чтобы правила ресурса учитывали, когда и где порядок имеет значение.(В большинстве случаев, например, ?foo=1&foo=2&bar=x и ?foo=2&foo=1&bar=x - это не одно и то же, но ?foo=1&foo=2&bar=x и ?bar=x&foo=1&foo=2 и ?foo=1&bar=x&foo=2. Но опять же, это зависит от ресурса.)

Если нет, вам нужно выбрать те части, которые вы считаете одинаковыми, и сравнить их.location поддерживает отдельные детали, как это делают элементы анкера (protocol, host и т. Д.).

...