Как динамически изменить атрибут href
Я пытаюсь сделать небольшой веб-сайт доступным для просмотра как онлайн, так и оффлайн, используя только html, css и немного jquery\javascript. Поэтому я использую все относительные пути, и все работает нормально, если только я не дошел до проблемы загрузки пользовательского меню на всех моих страницах с небольшим умным включением jquery.
Однако, так как мой menu.html загружен на разных страницах, расположенных в разных подкаталогах древовидной структуры, мне интересно, каков самый умный способ записать ссылки href разных голосов в меню.
Первоначально я начал использовать все абсолютные пути в menu.html, но, конечно, он работает только онлайн или офлайн, в зависимости от того, какой корневой домен я использую в абсолютных путях ( http://mywebsite.com/ или file:///D: моя_папка / и т.д.).
Конечно, также использование / в начале ссылки работает только онлайн, поскольку локально / обозначает букву диска, на которой расположена папка веб-сайтов, и будет работать тогда и только тогда, когда папка веб-сайта будет сохранена по самому высокому пути, например как D:/ мой сайт. Я хотел бы сделать что-то более адаптируемым независимо от локального пути.
2 ответа
На мой взгляд, лучший способ - использовать относительные URL-адреса из корня. Например, в вашем файле menu.html, когда вы ссылаетесь на jquery, вы можете сделать следующее:
/javascript/jquery.min.js
Добавление начала '/' делает так, чтобы путь всегда начинался с корня домена, независимо от того, где находится ваш html-файл в вашем каталоге.
Если вы использовали:
javascript/jquery.min.js
Это означает, что в любом каталоге, в котором находится ваш файл menu.html, также должна существовать папка для javascript, которая обычно не нужна.
С использованием <base>
Команда в небольшом скрипте, чтобы изменить его, решила мою проблему.
Вот пример:
<head>
<!-- Here a direct path is need to firstly load jquery -->
<script type = "text/javascript" src = "../include/js/jquery-1.10.2.min.js"></script>
<base id="host" href="" />
<script>
/* Where am I? */
here = window.location.href;
hereIndex = here.indexOf('temp-test');
/* make substring from root till temp-test/ */
newPathname = here.substring(0, hereIndex+10); //+10 to consdier also temp-test/
$("#host").attr("href", newPathname);
</script>
</head>
Не знаю, есть ли лучший способ сделать это.
В любом случае, даже если страница отображается правильно в журнале консоли, я все равно получаю ошибки на каждом относительном пути, который у меня есть GET file:///D:/temp-test/core/image/temp1.jpg net::ERR_FILE_NOT_FOUND
однако, например, это изображение вместо этого правильно загружено. Так что здесь с базовым тегом? Это своего рода не получить признание, но это работает..
Дальнейшее расследование необходимо для меня.