2013-02-27 32 views

Trả lời

7

window.location.hash sẽ trở lại "" cho cả không băm và băm rỗng. Nếu bạn cần phải thực hiện một sự phân biệt đối với một số lý do, bạn có thể chia window.location.href bởi #:

var frag = window.location.href.split("#"); 

if (frag.length == 1) { 
    // No hash 
} 
else if (!frag[1].length) { 
    // Empty hash 
} 
else { 
    // Non-empty hash 
} 

Hoặc kiểm tra băm hiện đầu tiên, theo yêu cầu của bạn:

if (window.location.hash) { 
    // Non-empty hash 
} 
else if (window.location.href.split("#").length == 1) { 
    // No hash 
} 
else { 
    // Empty hash 
} 

Xem thêm: How to remove the hash from window.location with JavaScript without page refresh?

+0

Có cách viết nó như sau: if (băm không trống) {} elseif (không có băm) {} else {// empty hash}? – bobylapointe

+1

@bobylapointe: Chắc chắn, mặc dù nó không tạo ra nhiều khác biệt vì chỉ có một khối sẽ được thực thi mỗi lần. Xem chỉnh sửa của tôi. –

1

Bạn không cần jQuery cho việc này. Nếu bạn có một băm rỗng, thì tất cả những gì bạn cần làm là kiểm tra ký tự cuối cùng của window.location.href. Sau đây sẽ trở lại true nếu có một băm rỗng:

window.location.href.lastIndexOf('#') === window.location.href.length - 1 
0

Đối với những người quan tâm đến phiên bản có thể sử dụng lại của giải pháp Andy E. Tôi đã thực hiện một hàm đơn giản để lấy trạng thái băm thực tế, dưới dạng giá trị bitwise.

/** 
* Checks if the location hash is given, empty or not-empty. 
* 
* @param {String} [href] Url to match against, if not given use the current one 
* @returns {Number} An integer to compare with bitwise-operator & (AND) 
*/ 
function getHashState(href) { 
    var frag = (href || window.location.href).split('#'); 
    return frag.length == 1 ? 1 : !frag[1].length ? 2 : 4; 
} 

Bạn có thể so sánh giá trị trả lại dễ dàng với bitwise AND-operator (&).

if (getHashState() & 1); // no hash 
if (getHashState() & 2); // empty hash 
if (getHashState() & 4); // no empty hash 
Các vấn đề liên quan