javascript - जावास्क्रिप्ट का उपयोग कर यूआरएल में#hash की जांच कैसे कर सकते हैं?




jquery anchor (12)

मेरे पास कुछ jQuery जावास्क्रिप्ट कोड है जो मैं केवल तब चलाना चाहता हूं जब एक यूआरएल में हैश (#) एंकर लिंक हो। जावास्क्रिप्ट का उपयोग करके आप इस चरित्र की जांच कैसे कर सकते हैं? मुझे एक साधारण पकड़-सभी परीक्षण की आवश्यकता है जो इन जैसे यूआरएल का पता लगाएंगे:

  • example.com/page.html#anchor
  • example.com/page.html#anotheranchor

मूल रूप से कुछ के साथ कुछ:

if (thereIsAHashInTheUrl) {        
    do this;
} else {
    do this;
}

अगर कोई मुझे सही दिशा में इंगित कर सकता है, तो इसकी बहुत सराहना की जाएगी।


... या एक jquery चयनकर्ता है:

$('a[href^="#"]')

अधिकांश लोग दस्तावेज़.लोकेशन में यूआरएल गुणों से अवगत हैं। यह बहुत अच्छा है अगर आप केवल वर्तमान पृष्ठ में दिलचस्पी रखते हैं। लेकिन सवाल पृष्ठ पर एंकरों को पार्स करने में सक्षम होने के बारे में था, न कि पृष्ठ पर।

ज्यादातर लोगों को याद आती है कि वे वही यूआरएल गुण एंकर तत्वों के लिए भी उपलब्ध हैं:

// To process anchors on click    
jQuery('a').click(function () {
   if (this.hash) {
      // Clicked anchor has a hash
   } else {
      // Clicked anchor does not have a hash
   }
});

// To process anchors without waiting for an event
jQuery('a').each(function () {
   if (this.hash) {
      // Current anchor has a hash
   } else {
      // Current anchor does not have a hash
   }
});

कभी-कभी आपको पूर्ण क्वेरी स्ट्रिंग मिलती है जैसे "#anchorlink? firstname = mark"

हैश मान प्राप्त करने के लिए यह मेरी स्क्रिप्ट है:

var hashId = window.location.hash;
hashId = hashId.match(/#[^?&\/]*/g);

returns -> #anchorlink

क्या आपने यह कोशिश की है?

if (url.indexOf("#") != -1)
{
}

(जहां url वह url है जिसे आप देखना चाहते हैं, जाहिर है।)


पार्ट्रिज और गैरेथ्स ऊपर टिप्पणियां बहुत अच्छी हैं। वे एक अलग जवाब के लायक हैं। जाहिर है, हैश और खोज गुण किसी भी HTML लिंक ऑब्जेक्ट पर उपलब्ध हैं:

<a id="test" href="foo.html?bar#quz">test</a>
<script type="text/javascript">
   alert(document.getElementById('test').search); //bar
   alert(document.getElementById('test').hash); //quz
</script>

या

<a href="bar.html?foo" onclick="alert(this.search)">SAY FOO</a>

यदि आपको नियमित स्ट्रिंग वैरिएबल पर इसकी आवश्यकता होनी चाहिए और इसके आसपास jQuery होना है, तो यह काम करना चाहिए:

var mylink = "foo.html?bar#quz";

if ($('<a href="'+mylink+'">').get(0).search=='bar')) {
    // do stuff
}

(लेकिन शायद यह थोड़ा अधिक हो गया ..)


मनमाने ढंग से यूआरआई-जैसी तारों से स्थान गुणों को सारणित करने के लिए यहां एक विधि के रूप में इसे फेंकना। यद्यपि window.location instanceof Location का window.location instanceof Location सत्य है, Location का आह्वान करने का कोई भी प्रयास आपको बताएगा कि यह एक अवैध कन्स्ट्रक्टर है। आप अभी भी एक डीओएम एंकर तत्व की href संपत्ति के रूप में अपनी स्ट्रिंग को सेट करके hash , query , protocol इत्यादि जैसी चीज़ों पर जा सकते हैं, जो तब सभी पता गुणों को window.location साथ साझा करेंगे।

ऐसा करने का सबसे आसान तरीका यह है:

var a = document.createElement('a');
a.href = string;

string.hash;

सुविधा के लिए, मैंने एक छोटी सी लाइब्रेरी लिखी जो मूल Location कन्स्ट्रक्टर को एक के साथ बदलने के लिए इसका उपयोग करती है जो तार लेती है और window.location उत्पादन करती है। Location.js -जैसी वस्तुओं: location.js


यहां एक साधारण फ़ंक्शन है जो true या false लौटाता true (हैशटैग नहीं है):

var urlToCheck = 'http://www.domain.com/#hashtag';

function hasHashtag(url) {
    return (url.indexOf("#") != -1) ? true : false;
}

// Condition
if(hasHashtag(urlToCheck)) {
    // Do something if has
}
else {
    // Do something if doesn't
}

इस मामले में true है।

@ जोन-स्कीट की टिप्पणी के आधार पर।


सरल:

if(window.location.hash) {
  // Fragment exists
} else {
  // Fragment doesn't exist
}

  if(window.location.hash) {
      var hash = window.location.hash.substring(1); //Puts hash in variable, and removes the # character
      alert (hash);
      // hash found
  } else {
      // No hash found
  }

$('#myanchor').click(function(){
    window.location.hash = "myanchor"; //set hash
    return false; //disables browser anchor jump behavior
});
$(window).bind('hashchange', function () { //detect hash change
    var hash = window.location.hash.slice(1); //hash to string (= "myanchor")
    //do sth here, hell yeah!
});

इससे समस्या हल हो जाएगी;)


var requestedHash = ((window.location.hash.substring(1).split("#",1))+"?").split("?",1);

window.location.hash 

हैश पहचानकर्ता वापस कर देगा






fragment-identifier