2016-01-25 4 views
5

बदलें मेरे पास एक स्क्रिप्ट है जो क्लिक किए गए तत्व से मान जोड़ती है। हालांकि - क्लिक किए जाने पर मैं मूल्य को नए से बदलना चाहता हूं।यूआरएल पैरामीटर को गतिशील रूप से

उदाहरण:

<ul class="acfilter"> 
<li><a href="reset">reset</a></li> 
<li><a href="One">One</a></li> 
<li><a href="Two">Two</a></li> 
</ul> 

स्क्रिप्ट

$(document).ready(function() { 
    $('ul.acfilter li a').on('click', function(e) { 
     e.preventDefault(); 
     if ($(this).attr('href') != "reset") { 
      if (location.href.indexOf('?') === -1) { 
       location.href = location.href + "?fss=" + $(this).attr('href'); 
      } else { 
       location.href = location.href + "+" + $(this).attr('href'); 
      } 
     } else { 
      location.href = location.origin + location.pathname; 
     } 
    }); 
}); 

पहले पैरामीटर onclick ?fss=one और दूसरे पर देता है आपको मिल क्लिक करें? fss=one+two। रीसेट लिंक इसे साफ़ करता है।

हालांकि - मैं क्लिक पर "दो" मान के साथ "एक" मान को प्रतिस्थापित करना चाहता हूं। मान गतिशील है - इसलिए मैं ज्ञात मान के साथ/अन्य url.replace बस नहीं कर सकता।

मैं यह कैसे कर सकता हूं?

संपादित करें:

वहाँ यूआरएल में अन्य पैरामीटर हो सकता है कि उल्लेख करना भूल। उदाहरण:

प्रथम क्लिक देता

?fss=one 

और जब एक कार्रवाई है कि अन्य पैरामीटर मैं इसे उल्लेख देता कर इस देता है:

?param=list&fss=one 

जो उपयोगकर्ता बृजेश से स्क्रिप्ट का उपयोग करके सही है चौधरी लवू Param = list एक पैरामीटर है जो हमेशा पहले होना चाहिए, और ऐसा करने के लिए लिखा गया है और सूची से बड़े पैमाने पर परिवर्तन में परिवर्तन, यह भी उस स्क्रिप्ट के साथ काम करता है। बजाय

?param=list&fss=one 

से

?fss=one 
+2

रीसेट करने के लिए कोशिश इन anwers http: // stackoverflow।कॉम/प्रश्न/5999118/ऐड-या-अपडेट-क्वेरी-स्ट्रिंग-पैरामीटर – gurvinder372

उत्तर

0

के लिए जा रहा

?param=list&fss=two 

यह सब कुछ बदल देता है करने के लिए इस प्रयास करें की -

समस्या जब मैं अपने विशिष्ट वर्ग पर क्लिक करें दूसरी बार है।

$('ul.acfilter li a').on('click', function(e) { 
    e.preventDefault(); 
    if ($(this).attr('href') != "reset") { 
     if (location.href.indexOf('?') === -1) { 
      location.href = location.href + "?fss=" + $(this).attr('href'); 
     } else { 
      location.href = location.origin + location.pathname + "?fss=" + $(this).attr('href'); 
     } 
    } else { 
     location.href = location.origin + location.pathname; 
    } 
}); 

या सरल स्ट्रिंग तरीकों के साथ, आप एक समारोह अपनी स्क्रिप्ट के लिए नीचे की तरह इतना है कि अन्य पैरामीटर को बदलने के लिए की जरूरत नहीं है जोड़ सकते हैं,:

$(document).ready(function() { 
$('ul.acfilter li a').on('click', function(e) { 
    e.preventDefault(); 
    if ($(this).attr('href') != "reset") { 
     if (location.href.indexOf('?') === -1) { 
      location.href = location.href + "?fss=" + $(this).attr('href'); 
     } else { 
      location.href = changeParameter(window.location.toString(),"fss",$(this).attr('href')); 
     } 
    } else { 
     location.href = location.origin + location.pathname; 
    } 
}); 

}); 
    function changeParameter(str,par,val) 
    { 
      var t1 = str.indexOf(par); 
      var t3 = t1+par.length+1; 
      var t2= str.indexOf("&",t3); 
      if(t2==-1) 
      { 
       return str.substring(0,t3)+val; 
      } 
      else 
      { 
       return str.substring(0,t3)+val+str.substring(t2); 
      } 
    } 
+0

अच्छी तरह से, शायद, लेकिन निश्चित रूप से एक सामान्य समाधान नहीं है क्योंकि यह काम नहीं करेगा अगर वह था? fss = one & foo = bar – Gavriel

+0

यह काम करता है - लेकिन विफल रहता है मेरे पास यूआरएल में एक और पैरामीटर है - फिर इसे जोड़ने के बजाय उसे भी बदल देता है - मैं केवल निर्दिष्ट वर्ग से मान को प्रतिस्थापित करना चाहता हूं। शायद उल्लेख करना चाहिए कि यह मामला हो सकता है। – user3344734

+0

हम्म दूसरा भाग काम नहीं करता है - जब मुझे एक और पैरामीटर मौजूद था तो उसने मुझे/प्रेस्डोन का यूआरएल दिया। – user3344734

0

आप अपने पैरामीटर fss ट्रैक करने की जरूरत (मूल्य नहीं) और हर समय इसके मूल्य को प्रतिस्थापित करें।

ऐसा करने का सबसे अच्छा तरीका के बिंदु से split है।

//Lets split the href by the param fss 
var urlParts = location.href.split("fss"); 

//Insert your new value together with the param. (split removes the param) 
if (location.href.indexOf("?") < 0) 
    location.href = urlParts[0] + "?fss=" + $(this).attr('href'); 
else  
    location.href = urlParts[0] + "fss=" + $(this).attr('href'); 

और

location.href = location.href.split("fss")[0]; 
+0

हाय चार्ली और उत्तर के लिए धन्यवाद। हालांकि - मुझे लगता है कि यह काम करने में सक्षम नहीं है, क्या आप मुझे दिखाएंगे कि इसे मेरे रीसेट विकल्प के साथ काम करने के लिए कैसे लिखना है? – user3344734

+0

क्षमा करें - एक गलती थी। उत्तर अपडेट किया गया। 'विभाजन' स्ट्रिंग sans delimiter (fss) के हिस्सों से बाहर एक सरणी बनाता है। सिद्धांत यहाँ है। –

संबंधित मुद्दे