쿼리 문자열없이 URL을 얻는 방법이 있습니까?


267

와 같은 URL이 http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu=true&pcode=1235있습니다.

쿼리 문자열없이 URL을 얻고 싶습니다 : http://localhost/dms/mduserSecurity/UIL/index.php.

JavaScript에는이 방법이 있습니까? 현재을 사용 document.location.href하고 있지만 전체 URL을 반환합니다.


답변:


348

이 시도: window.location.href.split('?')[0]


12
@ 링컨-왜? 이것이 안전하지 않은 이유는 없습니다. 또한 사양 (window.location.href가 반환 해야하는 사양 및 URL 작동 방식에 대한 사양) 내에 있으므로 향후 문제가 발생하지 않습니다. 더 깔끔한 코드를 위해 더 쉽게 읽고 이해합니다. 작은 코드 일수록 짧습니다. 마지막으로 Felix의 답변보다 덜 강하고 덜 복잡합니다. 펠릭스가 틀렸다고 말하는 것은 아니지만, 어떤 종류의 실패 / 불안정한 예가 없다면이 대답이 거의 모든면에서 우수하다는 것입니다.
Jimbo Jonny

1
다른 답변 에서처럼 window.location.pathname
..etc를 사용해야

22
@JimboJonny @Marcel 조각 식별자를 처리하지 않습니다 (예 : stackoverflow.com/questions/5817505#5817548#용어 ). 정규식을 사용하거나 여러 .split () 함수를 사용해야합니다.이 시점에서 URL을 정리할 때 "간단한"답변이라는 값을 잃었습니다. 이것은 기술적으로 질문의 범위를 벗어 났지만 여전히 관련이 있다고 말하고 싶습니다.
andrewb

2
이것이 조각 식별자를 처리하지 않는 것이 정확하지만, 아커는 완전히 위생 처리 된 URL을 요청하지 않았습니다. 그는 쿼리 문자열이없는 URL을 구체적으로 요청 했으며이 답변은 정확히 그것을 제공합니다. 쿼리 문자열이 제거 된 동일한 URL
Drew Major


36
location.toString().replace(location.search, "")

11
이것은 매우 저평가 된 답변입니다. 질문에 정확히 답하는 유일한 사람입니다. 더 짧은 옵션 :location.href.replace(location.search, '')
Guido Bouman

2
domain.com/?x=1#top
Onur Topal

2
이 질문에 10 개의 답변이 있습니다. 그중 하나만 해시를 유지합니다 ( 질문에 대해 묻는 URL에는 존재하지 않음 ). 이 답변이 존재하지 않는 해시를 보존하지 않지만 다른 해시는 보존하지 않는다고 지적하는 두 의견이있는 이유는 무엇입니까?
Quentin

13
var url = window.location.origin + window.location.pathname;

5
IE11에서 오리진이 지원되지 않기 때문에 다운 투표 됨 :-(
George

6
특정 브라우저에서 작동하지 않기 때문에 왜 다운 투표를 하시겠습니까? 많은 곳에서 IE10을 사용하는 응용 프로그램 때문에 여전히 표준으로 사용합니다.
Brad

1
IE11.309.16299.0에서 작동
Ryan Burbidge

10

해시도 제거하려면 다음을 시도하십시오. window.location.href.split(/[?#]/)[0]


5

시험:

document.location.protocol + '//' +
document.location.host +
document.location.pathname;

(NB : 필요한 경우 포트도 포함되도록 .host하기보다는 .hostname)



4

split을 사용하여 문자열을 자르십시오 (쉬운 방법).

var myString = "http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu=true&pcode=1235"
var mySplitResult = myString.split("?");
alert(mySplitResult[0]);

3

쿼리를 제외한 URL의 모든 부분을 가져 오려면 :

var url = (location.origin).concat(location.pathname).concat(location.hash);

여기에 해시도 포함되어 있습니다 (예제 URL에 해시가 없다는 것을 알고 있지만 완전성을 위해 해당 측면을 포함했습니다). 해시를 제거하려면 간단히 제외하십시오 .concat(location.hash).

concatJavascript 문자열을 함께 묶는 데 사용 하는 것이 좋습니다 (대신 +) : 경우에 따라 유형 혼동과 같은 문제를 피할 수 있습니다.



1

두 가지 방법이 있습니다.

<script type="text/javascript">
    var s="http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu
                                =true&pcode=1235";

    var st=s.substring(0, s.indexOf("?"));

    alert(st);

    alert(s.replace(/\?.*/,''));
</script>

1

이건 어때요: location.href.slice(0, - ((location.search + location.hash).length))


0

JS의 $ (document) .ready에 다음 두 줄을 추가하십시오.

$(document).ready(function () {
 $("div.sidebar nav a").removeClass("active");
        $('nav a[href$="'+ window.location.pathname.split("?")[0] +'"]').addClass('active');
});

달러 기호 ($)를 사용하는 것이 좋습니다 (끝으로)

$('nav a[href$

(^) 대신 (로 시작)

$('nav a[href^

(^) 기호를 사용하고 탐색 메뉴에 중첩 된 URL이있는 경우 (예 : "/ account"및 "/ account / roles")

둘 다 활성화됩니다.


0

dot net core 3.1을 사용 하는 경우 대소 문자 무시 경로를 지원 하므로 rout이 작은 문자이고 사용자가 대문자로 rout을 쓰는 경우 이전 방법은 도움이되지 않습니다.

따라서 다음 코드는 매우 유용합니다.

$(document).ready(function () {
    $("div.sidebar nav a").removeClass("active");
    var urlPath = window.location.pathname.split("?")[0];
    var nav = $('div.sidebar nav a').filter(function () {
        return $(this).attr('href').toLowerCase().indexOf(urlPath.toLocaleLowerCase()) > -1;
    });
    $(nav).each(function () {
        if ($(this).attr("href").toLowerCase() == urlPath.toLocaleLowerCase())
            $(this).addClass('active');
    });
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.