регулярное выражение для сопоставления относительного пути href к текущему URL - PullRequest
1 голос
/ 02 ноября 2011

Я создаю меню для сайта, который не имеет никаких серверных возможностей. Из-за этого мой единственный способ динамического выделения текущей страницы в меню (среди прочих изменений) - проверить текущий URL и сравнить его с путем к текущему файлу; когда они совпадают, я добавляю класс «current», а также изменяю значения некоторых других атрибутов.

Проблема в том, что мое регулярное выражение соответствует только значениям href, которые представляют собой одно имя файла, а не относительные пути к другим папкам. Например, если мое меню хранится в папке "category", href="page.html" будет соответствовать "http://www.example.com/category/page.html", но если я использовал href="../category/page.html", оно не будет соответствовать. Та же проблема, если я использую корневой относительный путь в href.

Мое текущее регулярное выражение /[^\/]+$/)[0]. Вот как выглядит весь скрипт:

$(document).ready( function () { 
  var pathname = (window.location.pathname.match(/[^\/]+$/)[0]); 
  var currA = $("#nav-sub li a[href='" + pathname + "']"); 
  var treeParent = currA.closest(".tree-parent"); 
  treeParent.attr('aria-expanded', 'true'); 
  currA.parents("li").addClass("current");
  treeParent.children('a').first().attr('tabindex','0'); 
});

1 Ответ

0 голосов
/ 02 ноября 2011

С вашей ситуацией было бы намного легче справиться, если бы вы просто использовали корневые относительные пути во всех ваших гиперссылках меню. Тогда вы можете просто сравнить с window.location.pathname.

Предполагая, что это невозможно, вы можете использовать библиотеку jq-uri , чтобы получить относительные корневые пути в javascript от любого href, который у вас есть. По сути, это оболочка библиотеки для регулярных выражений, которую вы ищете.

Чтобы получить корневой относительный путь для данного href было бы что-то вроде:

var href = "../test";

var base_uri = new URI(window.location.href); 
var uri = new URI(href);
uri.resolve(base_uri).path;


Чтобы получить желаемую функциональность, вы можете просто:

  1. Перебрать все теги привязки меню
  2. Примените приведенный выше код к HREF, чтобы получить относительный корневой путь
  3. Сравнить вычисленный путь с window.location.path
  4. Примените свой "текущий" класс и другие изменения, когда найдете совпадение.

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

...