Có phương pháp nào để lấy URL mà không cần chuỗi truy vấn không?


268

Tôi có một URL như http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu=true&pcode=1235.

Tôi muốn nhận URL mà không cần chuỗi truy vấn : http://localhost/dms/mduserSecurity/UIL/index.php.

Có phương pháp nào cho việc này trong JavaScript không? Hiện tại tôi đang sử dụng document.location.href, nhưng nó trả về URL hoàn chỉnh.


Câu trả lời:


348

Thử cái này: window.location.href.split('?')[0]


12
@Lincoln - Tại sao? Tôi thấy không có lý do gì mà điều này sẽ không an toàn. Nó cũng nằm trong thông số kỹ thuật (cả thông số kỹ thuật cho window.location.href sẽ trả về và thông số kỹ thuật cho cách hoạt động của URL) vì vậy nó không có bất kỳ vấn đề nào trong tương lai. Nó dễ đọc và dễ hiểu hơn đối với mã sạch hơn. Nó ngắn hơn cho mã nhỏ hơn. Và cuối cùng, nó ít dữ dội hơn và ít phức tạp hơn câu trả lời của Felix. Không nói rằng Felix sai, nhưng tôi nói rằng không có một ví dụ cụ thể nào về sự thất bại / không an toàn thì câu trả lời này vượt trội về mọi mặt.
Jimbo Jonny

1
bạn nên sử dụng window.location.pathname ..etc như trong các câu trả lời khác
Muayyad Alsadi

22
@JimboJonny @Marcel Điều này không xử lý các định danh phân đoạn (ví dụ: #thuật ngữ trong stackoverflow.com/questions/5817505#5817548 ). Bạn sẽ phải sử dụng regex hoặc sử dụng nhiều hàm .split (), tại thời điểm đó bạn đã mất giá trị của câu trả lời "đơn giản" này trong việc xóa URL. Cấp điều này là về mặt kỹ thuật vượt quá phạm vi của câu hỏi, nhưng tôi nói nó vẫn còn liên quan.
andrewb

2
Mặc dù chính xác là điều này không xử lý các định danh phân đoạn, nhưng người hỏi không yêu cầu một URL được khử trùng hoàn toàn. Ông đã hỏi cụ thể về một url không có chuỗi truy vấn và câu trả lời này cung cấp chính xác điều đó. Cùng một URL, với chuỗi truy vấn bị xóa.
vẽ Thiếu tá


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

12
Đây là một câu trả lời rất thấp. Đây là người duy nhất trả lời chính xác câu hỏi. Tùy chọn thậm chí ngắn hơn:location.href.replace(location.search, '')
Guido Bouman

2
những gì về phần đó, ví dụ như domain.com/?x=1#top
Onur Topal

2
Có 10 câu trả lời cho câu hỏi này. Chỉ một trong số họ duy trì hàm băm ( không tồn tại trên URL mà câu hỏi đang hỏi về dù sao ). Tại sao có hai ý kiến ​​chỉ ra rằng câu trả lời này không bảo tồn hàm băm không tồn tại mà không phải là bất kỳ câu hỏi nào khác?
Quentin

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

5
bỏ phiếu xuống vì nguồn gốc không được hỗ trợ trong IE11 :-(
George

6
Tại sao bạn lại bỏ phiếu một cái gì đó chỉ vì nó không hoạt động trong một trình duyệt cụ thể? Rất nhiều nơi vẫn sử dụng IE10 như một tiêu chuẩn vì các ứng dụng mà họ sử dụng.
Brad

1
Hoạt động trong IE11.309.16299.0
Ryan Burbidge


5

Thử:

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

(NB: .hostthay .hostnamevì để cổng được bao gồm quá, nếu cần thiết)



4

chỉ cần cắt chuỗi bằng cách sử dụng split (cách dễ dàng):

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

3

Để nhận mọi phần của URL ngoại trừ truy vấn:

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

Lưu ý rằng điều này cũng bao gồm cả hàm băm, nếu có một hàm (Tôi biết rằng không có hàm băm trong URL ví dụ của bạn, nhưng tôi đã bao gồm khía cạnh đó để hoàn thiện). Để loại bỏ băm, chỉ cần loại trừ .concat(location.hash).

Cách tốt hơn là sử dụng concatđể nối các chuỗi Javascript lại với nhau (chứ không phải +): trong một số trường hợp, nó tránh được các vấn đề như nhầm lẫn kiểu.



1

Đây là hai phương pháp:

<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

Còn cái này thì sao: location.href.slice(0, - ((location.search + location.hash).length))


0

Chỉ cần thêm hai dòng này vào $ (tài liệu). Đã có trong JS như sau:

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

tốt hơn là sử dụng ký hiệu đô la ($) (Kết thúc bằng)

$('nav a[href$

thay vì (^) (Bắt đầu với)

$('nav a[href^

bởi vì, nếu bạn sử dụng dấu (^) và bạn có các URL lồng nhau trong menu điều hướng, (ví dụ: "/ tài khoản" và "/ tài khoản / vai trò")

Nó sẽ hoạt động cả hai.


0

Nếu bạn sử dụng dot net core 3.1, thì đó là tuyến bỏ qua trường hợp hỗ trợ , vì vậy cách trước không hữu ích nếu thường trình bằng chữ nhỏ và người dùng viết thường trình bằng chữ in hoa.

Vì vậy, đoạn mã sau rất hữu ích:

$(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');
    });
});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.