2011-06-26 18 views
5

私は通常のクエリーストリングlijke http://www.mydomain.com/index.php?age=11&name=john&color=redの代わりにhttp://www.mydomain.com/age/11/name/john/color/redのようなセグメントベースのURLを使用するPHPフレームワークCodeigniterを使用しています。Javascript/jQueryを使用してセグメントベースのURLでクエリ文字列を取得する

ageキーの値をJavascript/jQueryを使用してURLから取得するにはどうすればよいですか?

11を取得した後、イベントが発生したときにjQueryオブジェクトに渡します。

$("#searchdistance_slider").slider({ 
     range: "min", 
     value: 5, 
     min: 0.5, 
     max: 10, 
     slide: function(event, ui) { 
      $("#search_distance").val(ui.value + " miles"); 
      window.location.replace("http://www.domain.com/" + age); 
      /* passing the value of age into URL to redirect to */ 
     } 
    }); 

UPDATE

  • キー/値のペアが位置を変更することができ、およびURLでキー/値ペアの数が
  • に固定されていない私は、値を取得する必要がありますユーザーが特定の値を変更するには、スライダを使用しているため、Javascriptの内は、ageを言うと、スライダーの新しい値20はredirecするのに使用されますユーザーにhttp://www.mydomain.com/age/20/name/john/color/red

答えて

3

jQuery URL parserプラグインを試すことができます。

.segment(n)コールを使用してURLパスを検索して"age"を探し、次のものを探して、探している年齢の値を含める必要があります。

それともageが常に同じ位置にある場合.fsegment(n)方法を試してみてください。

か何かのように.segment()を使用する:あなたが唯一のage一部をしたい場合は、あなたが持っていない

var parts = $.url(your_url).segment(); 
var params = []; 
for (var i=0; i<parts.length/2; i++) { 
    params[parts[2*i]] = parts[2*i+1]; 
} 
var age = parseInt(params['age']); 

(私もそれを行うためのきれいな方法があると確信しています。)

そのすべてを辞書に詰め込む。必要なキーが見つかったら早期にループを終了してください。

var parts = {}, 
    bits = location.pathname.substr(1).split('/'); // get rid of first/and split on slashes 

for (var i = 0; i<bits.length; i += 2) { 
    parts[bits[i]] = bits[i+1]; 
} 

あなたはその後、age値にアクセスすることができます:あなたはこのようなもので、それを分割することができ

var parts = $.url(your_url).segment(); 
var newpath = ''; 
for (var i=0; i<parts.length/2; i++) { 
    if (parts[2*i] == 'age') { 
    newpath += '/age/' + (parseInt(parts[2*i+1]) + 42); // put your age modifiy 
                 // code here 
    } else { 
    newpath += '/' + parts[2*i] + '/' + parts[2*i+1]; 
    } 
} 
alert(newpath); 
+0

URLセグメントの変更で、キー/値ペアの位置、だから私は、特定のキーと値のペアを簡単に対象とすることは難しいと思っています。 – Nyxynyx

+0

本当にそうではありません。 '.segment()'はすべてのパスフラグメントの配列を返します。キーベースのルックアップが必要な場合は、それをハッシュします(例を投稿します)。 – Mat

+0

素晴らしい.. 'params ['age']'を更新した後、URL全体を再構築する簡単な方法を知っていますか?私は 'newurl + = newurl +"/"+ parts [2 * i] +"/"+ parts [2]を使用して、配列をハッシュするのに使用されたものと同様の' for'ループを使用する行に沿って考えています。 * i + 1]が更新されました。 – Nyxynyx

1

:あなたが変更された年齢とのパスを再構築したい場合は

、のようなものを試してみてくださいparts.ageとなります。

+0

このようなサウンドは機能します。私は私の質問を更新しました。 'age'の値を新しい値で更新し、' age'の新しい値をurlに 'window.location.replace()'に渡すにはどうしたらいいですか? – Nyxynyx

0

あなたのコードが実行される前に、あなたのPHPスクリプトに次の行を追加します。

<?php 
$getAgre = (isset($_GET['age']) && strlen($_GET['age'])>0)? $_GET['age'] : 'null'; 
echo '<script>var age = '. $getAge .';</script>'; 
?> 

編集:[「年齢」]いくつかのセキュリティは$ _GETのコンテンツを表示する前にチェックし、あなたが持っていることを確認し、あなたのJSうあなたのイベントがの方が良いでしょう。スライダー()は、変数あなたはあなたの全体の現在のURLを与え、その後、必要な情報を取得するために、文字列でビットを果たしますwindow.location.href変数を使用することができます

0

存在し得るかどうかをチェック。部分文字列、分割、さらには正規表現。これがうまくいく

var ageMatch= window.location.href.match(/age\/([\d]*)/); 
var age= ageMatch[1]; 

念のために、あなたも同じように簡単にURLを更新することができます。

var newUrl= window.location.href.replace(/age\/([\d]*)/, age); 
window.location.href= newUrl; 
関連する問題