Javascript-эквивалент этой функции PHP - PullRequest
0 голосов
/ 27 октября 2011

Поэтому я пытаюсь собрать панель навигации и использую PHP, потому что я не знаком с Javascript.Я хочу создать функцию, которая будет возвращать имя текущей страницы, на которой я нахожусь, а затем соответствующим образом применять классы CSS.

код php

function setNav($section)
{
    $curSection = end(explode('/', $_SERVER['SCRIPT_NAME']));
    if ($section == $curSection)
    {
        echo ' class="active" ';
    }
}

И тогда я просто инициализируюв HTML это выглядит следующим образом:

<a href="abc.def" <?php setNav('index.php'); ?> >Home </a>

. По понятным причинам я бы предпочел сделать это в JavaScript или Jquery, но у меня возникли некоторые проблемы при сборке функции.Я посмотрел несколько уроков, но они пропускают несколько вещей.

  1. Как вытащить только последнюю часть имени файла.Я видел пару идей, делающих что-то вроде:

    <script type="text/javascript">
        var url = document.location.href;
        url = url.substring(0, (url.indexOf("#") == -1) ? url.length : url.indexOf("#"));
        url = url.substring(0, (url.indexOf("?") == -1) ? url.length : url.indexOf("?"));
        url = url.substring(url.lastIndexOf("/") + 1, url.length);
        alert(url);
    </script>
    

    Но потом я сталкиваюсь с проблемой 2. Также я понимаю, как работает подстрока, но я понятия не имею, что он делает со вторым аргументом, например '(url.indexOf ("#") == -1)?url.length: url.indexOf ("#") 'Я искал объяснения в google, w3schools и нескольких местах, также изучил расширенное использование substring (), но ничего не вышло.Любые указания приветствуются.

  2. Если, скажем, файл является индексом, URL выглядит примерно так: localhost / abc_corp /, поэтому при выполнении document.URL вызывается "localhost / abc_corp /" ипропускает часть index.php.

Любая помощь приветствуется заранее.

Ответы [ 6 ]

0 голосов
/ 23 февраля 2016
var schema = document.location.href.substring(0, document.location.href.lastIndexOf(document.domain + '/'));
var scriptName = document.location.href.replace(schema + document.domain, '');

Проверено в Chrome Inspector на этой же странице:

// document.location.href = "/4503636/javascript-ekvivalent-etoi-funktsii-php"

schema = "https://"
document.domain = "stackoverflow.com"
scriptName = "/questions/7909686/the-javascript-equivalent-of-this-php-function"
0 голосов
/ 05 октября 2013

var scriptName = location.href.substring ((location.protocol.length + location.hostname.length + 3)). Split ('?');

0 голосов
/ 27 октября 2011
var url = document.location.href;
url = url.substring(0, (url.indexOf("#") == -1) ? url.length : url.indexOf("#"));
url = url.substring(0, (url.indexOf("?") == -1) ? url.length : url.indexOf("?"));
url = url.substring(url.lastIndexOf("/") + 1, url.length);
alert(url);

Итак, первый url = url.substring (0, (url.indexOf ("#") == -1)? Url.length: url.indexOf ("#"));проверяет, есть ли символ фунта, и если он есть, он переводит подстроку с 0 в позицию символа фунта, если фунта нет, он просто переводит его с 0 на всю длину (т.е. ничего не делает)

второй делает то же самое с вопросительным знаком.

Проблема вторая, которую я мог решить, только анализируя для особых случаев.

0 голосов
/ 27 октября 2011

Если у вас есть работающее решение PHP, я не уверен, почему вы хотите преобразовать его в JavaScript.В любом случае, PHP - лучшее место, чтобы сделать это.

В любом случае, чтобы объяснить, что делает ваш JS, если у вас есть такой URL:

http://www.somedomain.com/somepage.php?someparam=234#123123

itвыбросит что-нибудь после "?"и / или "#", и все, что находится перед последним "/", сохраняя только тот бит, который я выделил жирным шрифтом.

Если ваш URL не содержит символов "/", например, у вас просто есть«www.somedomain.com», тогда он вернет всю строку, он не может придумать для вас имя файла.

Как это работает: сначала обратите внимание, что aString.indexOf(param) возвращает -1, если aSring делаетне содержит param, в противном случае возвращается индекс первого экземпляра.Таким образом, второй аргумент substring устанавливается в одно из двух значений в зависимости от того, что находит indexOf.Следующее:

var url = document.location.href;
url = url.substring(0, (url.indexOf("#") == -1) ? url.length : url.indexOf("#"));

начинается с полного URL, затем проверяется, есть ли символ «#» - если его нет, substring принимает всю строку (от 0 до url.length), в противном случае строка принимает значение, но не включая "#".Тогда:

url = url.substring(0, (url.indexOf("?") == -1) ? url.length : url.indexOf("?"));

Та же идея, но с "?".Если нет ни одной, сохраните всю строку, в противном случае держите все до, но не включая «?».Затем:

url = url.substring(url.lastIndexOf("/") + 1, url.length);

Берет все, начиная с символа после последнего символа "/" (который будет первым символом ("-1 + 1"), если такового не существует), до конца строки.

0 голосов
/ 27 октября 2011

2.Если в URL нет имени файла, javascript не будет ничего знать о названии файла, который дал ответ. Когда localhost / abc_corp / приведет к вызову index.php, это перенаправление на сервер, вызванное настройкой сервера, например, Индекс Apache DirectoryIndex

0 голосов
/ 27 октября 2011

Чтобы решить проблему 2, просто если последний символ в строке - это /, и если да, добавьте поддельное имя файла.

Но я согласен с Джорданом - совершенно не очевидно, почему вы это сделали.Делать это в PHP - правильная вещь.

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