2015-10-14 1 views
3

У меня есть URL-адреса, которые соответствуют той же структуре.Удаление конечной части URL-адреса в Javascript/JQuery

https://www.website.com/services/county/town/servicename/brand/

Когда поиск имеет нулевые результаты мы выводим кнопку, при нажатии запускает функцию, чтобы удалить последний раздел URL и, таким образом, расширить поиск.

Например, если приведенный выше URL-адрес вернул 0 результатов, нажмите кнопку «ОК», чтобы загрузить https://www.website.com/services/county/town/servicename/, удалив brand из критериев поиска и увеличивая вероятность получения результатов.

Код, который у меня есть для этого, но выглядит немного взломанным.

function expandSearch() { 
    var currentURL = window.location.href; 
    var parts = currentURL.split("/"); 
    var lastPart; 

    if (parts.length === 9) { 
     lastPart = currentURL.substr(currentURL.lastIndexOf('/') - parts[7].length) + '$'; 
     window.location.href = currentURL.replace(new RegExp(lastPart), ""); 
    } else if (parts.length === 8) { 
     lastPart = currentURL.substr(currentURL.lastIndexOf('/') - parts[6].length) + '$'; 
     window.location.href = currentURL.replace(new RegExp(lastPart), ""); 
    } else if (parts.length === 7) { 
     lastPart = currentURL.substr(currentURL.lastIndexOf('/') - parts[5].length) + '$'; 
     window.location.href = currentURL.replace(new RegExp(lastPart), ""); 
    } else if (parts.length === 6) { 
     lastPart = currentURL.substr(currentURL.lastIndexOf('/') - parts[4].length) + '$'; 
     window.location.href = currentURL.replace(new RegExp(lastPart), ""); 
    } 
} 

Поиск может возвращать 0 результатов в любой момент вплоть до https://www.website.com/services/ в этот момент вся база данных возвращается.

URL может также иметь отсутствующие элементы, например, он может иметь county, но не town.

Есть ли лучший/чистый способ удаления конечного элемента URL и перенаправление браузера на этот новый более широкий поиск?


Заключительная рабочая версия, которую я закончил с благодаря @ebilgin для тех, кто ищет:

function expandSearch() { 

    var parts = window.location.pathname.substr(1).split("/"); 
    parts = parts.filter(Boolean); // Remove trailing empty array object 
    parts.pop(); // Remove last array object 
    window.location.href = "/" + parts.join("/") + "/"; // Go to new Location 

} 

ответ

5

Вы можете использовать .pop() и .join() функции для вашей проблемы.

function expandSearch() { 
    var parts = window.location.pathname.substr(1); 
    var lastCharIsSlash = false; 

    if (parts.charAt(parts.length - 1) == "/") { 
     lastCharIsSlash = true; 
     parts = parts.slice(0, -1); 
    } 

    parts = parts.split("/"); 
    parts.pop(); 

    parts = "/" + parts.join("/") + (lastCharIsSlash ? "/" : ""); 

    window.location.href = parts; 
} 

Если все ваши URI имеют завершающую косую черту. Это гораздо более понятная версия.

function expandSearch() { 
    var parts = window.location.pathname.slice(1, -1).split("/"); 
    parts.pop(); 
    window.location.href = "/" + parts.join("/") + "/"; 
} 
+0

Благодарим за сообщение, что это будет работать отлично, если бы не косая черта в URL-адресе, дающая мне дополнительный пустой объект массива. '[" http: "," "," website.com "," services "," county "," servicename "," "]'. Любая идея, как я могу удалить только этот последний объект из массива? Я предполагаю, что я мог бы использовать pop() дважды, но это кажется немного взломанным снова :) –

+0

@TomPinchen Фактически location.pathname более точно, чем location.href. Вы можете использовать новую версию моего решения. – ebilgin

+0

Это намного чище. Хотя он по-прежнему только удаляет конечную косую черту из моего URL-адреса. Вы знаете, почему это было бы? –

Смежные вопросы