Как динамически изменить атрибут 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 однако, например, это изображение вместо этого правильно загружено. Так что здесь с базовым тегом? Это своего рода не получить признание, но это работает..

Дальнейшее расследование необходимо для меня.

Другие вопросы по тегам