Làm cách nào để lấy neo từ URL bằng jQuery?


184

Tôi có một URL giống như:

www.example.com/task1/1.3.html#a_1

Làm cách nào tôi có thể nhận a_1giá trị neo bằng jQuery và lưu trữ dưới dạng biến?

Câu trả lời:


206

Bạn có thể sử dụng .indexOf().substring(), như thế này:

var url = "www.aaa.com/task1/1.3.html#a_1";
var hash = url.substring(url.indexOf("#")+1);

Bạn có thể thử nó ở đây , nếu nó có thể không có #trong đó, if(url.indexOf("#") != -1)hãy kiểm tra như thế này:

var url = "www.aaa.com/task1/1.3.html#a_1", idx = url.indexOf("#");
var hash = idx != -1 ? url.substring(idx+1) : "";

Nếu đây là URL trang hiện tại , bạn chỉ có thể sử dụng window.location.hashđể lấy nó và thay thế #nếu bạn muốn.


10
Xin lưu ý: để lấy giá trị băm của cửa sổ chính từ bên trong iFrame, bạn phải sử dụng window.top.location.hashthay thế.
Paolo Stefan

1
url.split("#").pop() - Chậm hơn nhưng dễ hơn.
Ifch0o1

489

Đối với cửa sổ hiện tại , bạn có thể sử dụng điều này:

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

Để lấy giá trị băm của cửa sổ chính , hãy sử dụng:

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

Nếu bạn có một chuỗi có URL / hàm băm, phương pháp đơn giản nhất là:

var url = 'https://www.stackoverflow.com/questions/123/abc#10076097';
var hash = url.split('#').pop();

Nếu bạn đang sử dụng jQuery, hãy sử dụng điều này:

var hash = $(location).attr('hash');

1
Câu trả lời tao nhã. Có trường hợp nào trong đó không hoạt động?
sscirrus

2
phiên bản phím tắt - var hash = window.location.hash.substr(1);do một JS có cả hai hàm cơ sở / chuỗi con, chúng khác nhau, nhưng trong trường hợp này là như nhau.
Arthur Kushman

cách tốt nhất để theo dõi các thay đổi của điều này, tức là. Ai đó đã nhấp vào một liên kết trang bên trong?
Thoát khỏi

5
@RidIculous thử cái này: $ (window) .on ('hashchange', function () {$ ('h1'). Text (location.hash.slice (1));});
Silvio Delgado

71

Sử dụng

window.location.hash

để lấy lại mọi thứ bên ngoài và bao gồm cả #


15
Hãy nhớ sử dụng location.hash.slice(1)nếu bạn không muốn thẻ băm trong chuỗi cuối cùng!
Sandy Gifford

39

Kiểu jQuery:

$(location).attr('hash');

7
không phải mọi vấn đề javascript cần được giải quyết với jquery.
doxin

22
@doxin Tôi đồng ý nhưng câu hỏi là "Làm cách nào để lấy neo từ URL bằng jQuery?"
Valentin ngày

10

Bạn có thể sử dụng "mẹo" sau để phân tích bất kỳ URL hợp lệ nào . Nó tận dụng lợi thế của thuộc tính đặc biệt liên quan đến phần tử neo , hash.

Với jQuery

function getHashFromUrl(url){
    return $("<a />").attr("href", url)[0].hash.replace(/^#/, "");
}
getHashFromUrl("www.example.com/task1/1.3.html#a_1"); // a_1

Với JS đơn giản

function getHashFromUrl(url){
    var a = document.createElement("a");
    a.href = url;
    return a.hash.replace(/^#/, "");
};
getHashFromUrl("www.example.com/task1/1.3.html#a_1"); // a_1

3

Nếu bạn chỉ có một chuỗi url đơn giản (và do đó không có thuộc tính băm), bạn cũng có thể sử dụng biểu thức chính quy:

var url = "www.example.com/task1/1.3.html#a_1"  
var anchor = url.match(/#(.*)/)[1] 

1
Cần kiểm tra xem kết quả có phù hợp trước khi truy cập phần tử thứ hai của nó không, hoặc mã này sẽ bị lỗi nếu url không có neo.
Richard Garside
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.