2013-02-27 6 views
5

jQuery'yi kullanarak, 0hile ilgili bir karma ve boş bir karma arasında ayrım yapmanın bir yolu var mı?Boş hash ile no hash arasındaki fark

http://domain.tld/# 

Ve bu "hayır karma" dır:

Bu Bir "boş karma" dediğimiz Bunun için jQuery gerekmez

http://domain.tld/ 

cevap

7

window.location.hash hiçbir karma ve boş karma ikisi için "" döndürür: boş bir karma varsa aşağıdaki true dönecektir. Eğer bazı nedenlerden dolayı bir ayrım yapmak gerekirse, sen # tarafından window.location.href bölünmüş olabilir:

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

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

Veya isteğinize göre, ilk karma mevcut kontrol:

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

Ayrıca bkz: How to remove the hash from window.location with JavaScript without page refresh?

+0

şöyle yazmak için bir yol var mı: (hash boş değil) eğer {} elseif {} else {// boş bir karma} (hash yoktur)? – bobylapointe

+1

@bobylapointe: Tabii ki, her seferinde sadece bir blok yürütüldüğünden çok fazla fark yaratmıyor. Düzenlememe bak. –

1

. Boş bir karmaşa varsa, yapmanız gereken tek şey window.location.href'un son karakterini kontrol etmektir.

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

Andy E'nin çözümünün yeniden kullanılabilir sürümü ile ilgilenenler için. Gerçek karma durumu, bit değeri olarak elde etmek için basit bir işlev yaptım.

/** 
* 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; 
} 

Sen Bitwise VE-operatörü (&) ile kolayca dönüş değerlerini karşılaştırabilirsiniz.

if (getHashState() & 1); // no hash 
if (getHashState() & 2); // empty hash 
if (getHashState() & 4); // no empty hash