Làm cách nào để tôi nhận được mã định danh phân đoạn (giá trị sau hàm băm #) từ một URL?


211

Thí dụ:

www.site.com/index.php#hello

Sử dụng jQuery, tôi muốn đặt giá trị hellotrong một biến:

var type = 

Tôi không chắc chắn, liệu câu hỏi này có nên được gắn thẻ như jQuery và hỏi về nó không. Hầu hết các câu trả lời áp dụng cho JS mà không có jQuery và điều này có vẻ như là một mục tiêu lừa đảo tốt.
dùng4642212

Câu trả lời:


585

Không cần jQuery

var type = window.location.hash.substr(1);

154
Không đủ jQuery! (Đùa thôi: +1.)
nnnnnn

2
Tôi mới biết rằng # có thể được sử dụng dưới dạng 'hàm băm' hoạt động như một từ định danh / từ khóa trong JavaScript. Tuyệt vời
Clain Dsilva

13
Bạn cũng có thể sử dụng .slice(1)thay vì .substr(1)sẽ cung cấp một sự gia tăng khiêm tốn về hiệu suất, mặc dù nó không tạo ra sự khác biệt trong cuộc sống thực.
devius

3
OMG, bạn cần kiểm tra băm url bao nhiêu lần để tạo ra sự khác biệt đáng chú ý? Một triệu? "Tăng khiêm tốn" là một sự cường điệu quá lớn trong bối cảnh này. :-)
konrad

37

Bạn có thể làm điều đó bằng cách sử dụng mã sau đây:

var url = "www.site.com/index.php#hello";
var hash = url.substring(url.indexOf('#')+1);
alert(hash);

XEM DEMO


4
Lưu ý: indexOf không được IE8 hỗ trợ
Sebastiaan Ordelman

4
@SchalkKeun may mắn thay, bây giờ trong '18 nó gần như biến mất. Nhưng đối với những người vẫn phải đối phó với truyền thuyết đó thì nên biết về nó.
Sebastiaan Ordelman

6
Thành thật mà nói, IE8 không an toàn, tất cả các cổng thanh toán về cơ bản sẽ bỏ bất kỳ trình duyệt nào không hỗ trợ TLS 1.2 vào tuần tới (30 tháng 6 năm 2018), bạn sẽ không thể thực hiện thanh toán từ chúng. Vì vậy, điều đó làm cho tất cả các trình duyệt cũ kỹ này trở nên vô dụng đối với bất kỳ khách hàng thương mại điện tử nào.
Schalk Keun

13
var url ='www.site.com/index.php#hello';
var type = url.split('#');
var hash = '';
if(type.length > 1)
  hash = type[1];
alert(hash);

Bản demo hoạt động trên jsfiddle


Các iftuyên bố có thể được rút ngắn để var hash = type[1] || "";.
dùng4642212


6

Tôi đã có URL từ thời gian chạy, bên dưới đã đưa ra câu trả lời chính xác:

let url = "www.site.com/index.php#hello";
alert(url.split('#')[1]);

hi vọng điêu nay co ich


6

Nó rất dễ. Hãy thử mã dưới đây

$(document).ready(function(){
  var hashValue = location.hash.replace(/^#/, '');  
  //do something with the value here  
});

3
var hashValue = location.hash.replace (/ ^ # /, '');
flakerimi

3

Dựa trên mã của AK, đây là Hàm trợ giúp. Fiddle ở đây ( http://jsfiddle.net/M5vsL/1/ ) ...

// Helper Method Defined Here.
(function (helper, $) {
    // This is now a utility function to "Get the Document Hash"
    helper.getDocumentHash = function (urlString) {
        var hashValue = "";

        if (urlString.indexOf('#') != -1) {
            hashValue = urlString.substring(parseInt(urlString.indexOf('#')) + 1);
        }
        return hashValue;
    };
})(this.helper = this.helper || {}, jQuery);
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.