var HashSearch = new function() {
var params;
this.set = function (key, value) {
params[key] = value;
this.push();
};
this.remove = function (key, value) {
delete params[key];
this.push();
};
this.get = function (key, value) {
return params[key];
};
this.keyExists = function (key) {
return params.hasOwnProperty(key);
};
this.push= function() {
var hashBuilder = [], key, value;
for(key in params) if (params.hasOwnProperty(key)) {
key = escape(key), value = escape(params[key]); // escape(undefined) == "undefined"
hashBuilder.push(key + ((value !== "undefined") ? '=' + value : ""));
}
window.location.hash = hashBuilder.join("&");
};
(this.load = function() {
params = {}
var hashStr = window.location.hash, hashArray, keyVal
hashStr = hashStr.substring(1, hashStr.length);
hashArray = hashStr.split('&');
for(var i = 0; i < hashArray.length; i++) {
keyVal = hashArray[i].split('=');
params[unescape(keyVal[0])] = (typeof keyVal[1] != "undefined") ? unescape(keyVal[1]) : keyVal[1];
}
})();
}
Sử dụng nó:
Kiểm tra nếu một "chìa khóa băm" đang hiện diện:
HashSearch.keyExists("thekey");
Lấy giá trị cho một chìa khóa băm:
HashSearch.get('thekey');
Đặt giá trị cho khóa băm và cập nhật hàm băm URL:
HashSearch.set('thekey', 'hey');
Di chuyển một chìa khóa băm từ URL:
HashSearch.remove('thekey');
Nạp lại băm vào đối tượng địa phương:
HashSearch.load();
Đẩy giá trị then chốt hiện nay thiết lập để băm URL:
HashSearch.push();
Lưu ý rằng khi một khóa không tồn tại và bạn cố gắng get
nó, nó sẽ trả về undefined
. Tuy nhiên, khóa có thể tồn tại không có giá trị - ví dụ: #key=val&novalue
trong đó novalue là khóa không có giá trị. Nếu bạn làm HashSearch.get("novalue")
, nó cũng sẽ trả lại undefined
. Trong trường hợp đó, bạn nên sử dụng HashSearch.keyExists("novalue")
để xác minh rằng đó thực sự là một khóa.
Nguồn
2010-09-16 18:25:18
* Thẻ băm * trong url là gì? Bạn có thể cung cấp một ví dụ? –
@Darin Dimitrov: Tôi đoán anh ấy có nghĩa là định danh phân đoạn của một URI. Nhưng một ví dụ sẽ hữu ích. – Gumbo
'href.hash' có hoạt động không? @ Dimitrov, tôi nghĩ @mike có nghĩa là phần bao gồm và sau '#' trong URL. – strager