2013-02-27 149 views
5

jQuery का उपयोग करने के बीच अंतर, वर्तमान window.location पर कोई हैश और खाली हैश के बीच अंतर करने का कोई तरीका नहीं है?खाली हैश और कोई हैश

यह है कि मैं क्या एक "खाली हैश" कहते हैं:

http://domain.tld/# 

और यह "कोई हैश" है:

http://domain.tld/ 

उत्तर

7

window.location.hash दोनों कोई हैश और खाली हैश के लिए "" वापस आ जाएगी। आप किसी कारण के लिए एक अंतर बनाने की जरूरत है, तो आप # द्वारा window.location.href विभाजित कर सकते हैं:

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

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

या मौजूदा हैश पहले अपने अनुरोध के अनुसार के लिए जाँच: भी

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

देखें: How to remove the hash from window.location with JavaScript without page refresh?

+0

क्या ऐसा लिखने का कोई तरीका है: यदि (हैश खाली नहीं है) {} elseif (कोई हैश नहीं है) {} else {// खाली हैश}? – bobylapointe

+1

@bobylapointe: निश्चित रूप से, हालांकि यह बहुत अंतर नहीं करता है क्योंकि प्रत्येक बार केवल एक ब्लॉक निष्पादित किया जाएगा। मेरा संपादन देखें। –

1

आप इस के लिए jQuery जरूरत नहीं है। यदि आपके पास खाली हैश है, तो आपको केवल window.location.href के अंतिम वर्ण की जांच करनी है। निम्नलिखित true वापस आ जाएगी अगर वहाँ एक खाली हैश है:

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

उन लोगों के लिए जो एंडी ई के समाधान के पुन: प्रयोज्य संस्करण में रुचि रखते हैं। मैंने वास्तविक हैश-स्टेट को बिटवाई वैल्यू के रूप में प्राप्त करने के लिए एक सरल कार्य किया है।

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

आप बिटवाइज़ और ऑपरेटर (&) के साथ आसानी से वापसी मूल्यों की तुलना कर सकते हैं।

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