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];
}
})();
}
Su uso:
Comprobar si una "clave hash" está presente:
HashSearch.keyExists("thekey");
obtener el valor de una clave hash:
HashSearch.get('thekey');
Ajuste el valor para una clave hash, y actualice el hash URL:
HashSearch.set('thekey', 'hey');
Eliminar una clave hash a partir de la URL:
HashSearch.remove('thekey');
Actualizar el hash en el objeto local:
HashSearch.load();
Empuje el valor de la clave actual establecido para el hash URL:
HashSearch.push();
Tenga en cuenta que cuando una clave no existe e intenta get
, se devolverá undefined
. Sin embargo, una clave podría existir sin ningún valor, por ejemplo #key=val&novalue
donde novalue es una clave sin valor. Si lo hace HashSearch.get("novalue")
también devolvería undefined
. En ese caso, debe usar HashSearch.keyExists("novalue")
para verificar que efectivamente sea una clave.
Lo que es de hash tag * * en la url? Podría dar un ejemplo? –
@Darin Dimitrov: supongo que se refiere al identificador de fragmento de un URI. Pero un ejemplo sería útil. – Gumbo
¿'href.hash' no funciona? @Darin Dimitrov, creo que @mike significa la parte que incluye y después del '#' en la URL. – strager