_

Tak, jako v PHP pracujeme s parametry oddělenými otazníkem a následně ampersandem (&), můžeme v JavaScriptu pracovat s kotvami. Nejčastější využití takzvané kotvy spočívá v odkazu na nadpis či odstavec dále v textu nebo přímý odkaz na aktivní záložku. Pomocí hodnoty kotvy ale můžeme v kódu podmiňovat naprosto cokoli. Tak, jako query string ?arg=value&page=3 splní svůj účel, může pracovat i kotva ve tvaru #arg=value&page=neco. PHP takový řetězec v URL už rozpoznat nedokáže, kdežto JavaScript si z něj umí vzít potřebné hodnoty.

Proměnná, kterou hledáme se skrývá v parametru hash objektu window.location. Ten obsahuje úplnou url včetně kotvy. Rozparsování je naprosto triviální, a tak můžeme začít s kotvou pracovat jako s plnohodnotnými proměnnými.

/**
 * vytahne a rozparsuje kotvu z url
 * @return array 
 **/
function get_hash() {
	hash = document.location.hash.replace(new RegExp('^(.*)#'), '');
	get = {}
	if (hash) {
		hash = hash.split('&');
		for (i = 0; i < hash.length; i++) {
			hash[i] = (hash[i]).split('=');
			get[hash[i][0]] = (hash[i][1] ? hash[i][1] : null);
		}
	}
	return get;
}

_get = get_hash();

Použití

Po rozparsování následujícího příkladu dostaneme pole ve tvaru:

// http://www.treba.cz/#arg=value&none&page=2

_get = {
	arg : value,
	none : null,
	page : 2
};

if (_get.arg == 'neco') {
// ...
}

Proměnné bez definované hodnoty bude přiřazena automaticky hodnota null.

Tip

Sám používám tento způsob například pro cílení skrytých záložek. Navigace vede právě na kotvy, ale jelikož DOM neobsahuje žádný HTML element s takto podivným ID, stránka neposkočí. Hodnotu kotvy lze totiž v url libovolně měnit bez refreshe. Pak podle hodnoty proměnné, například #tab=main přidám aktivní třídu odkazu, který vede na #main, zobrazím div#main a všechny ostatní divy definované jako záložky skryji.