2

私のスクリプトでは、簡単なリストに編集用のリンクが表示されます

<ul>
<li><a href="edit.php?id=5" class="edit">click here</a></li>
<li><a href="edit.php?id=5" class="edit">click here</a></li>
<li><a href="edit.php?id=5" class="edit">click here</a></li>
<li><a href="edit.php?id=5" class="edit">click here</a></li>
</ul>

私が必要とするのは、変数 id を読み取ることです。これにより、.ajax 呼び出しを介して送信できるようになり、この関数を試しました

$(document).ready(function(){
    function getUrlVars() {
        var vars = [], hash;
        var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1)
                                         .split('&');
        for(var i = 0; i < hashes.length; i++)
        {
            hash = hashes[i].split('=');
            vars.push(hash[0]);
            vars[hash[0]] = hash[1];
        }
        return vars;
     }
     $('.edit').click(function(){
         var test = getUrlVars()["id"];
         alert(test);
     });
});

リンクをクリックすると、警告メッセージが表示されますundefined

私は別の機能を試しました:

$(document).ready(function(){
    var urlParams = {};
    (function () {
        var match,
               pl = /\+/g,  // Regex for replacing addition symbol with a space
           search = /([^&=]+)=?([^&]*)/g,
           decode = function(s) { 
               return decodeURIComponent(s.replace(pl, " ")); 
           },
           query  = window.location.search.substring(1);
           while (match = search.exec(query))
               urlParams[decode(match[1])] = decode(match[2]);
     })();
     $('.edit').click(function(){
         var test = urlParams["id"];
         alert(test);
     });
 });

...しかし、これでも警告メッセージが表示されますundefined

4

6 に答える 6

2

あなたが試したメソッドは引数として URL を取りませんが、現在の URL パラメーター(つまり、兄弟内の URL) を解析します。最初のメソッドを次のように変更して機能させるだけです。

$(function() {
    function getUrlVars(url) {
        var vars = [], hash;
        var hashes = url.slice(url.indexOf('?') + 1).split('&');
        for(var i = 0; i < hashes.length; i++) {
            hash = hashes[i].split('=');
            vars.push(hash[0]);
            vars[hash[0]] = hash[1];
        }
        return vars;
    }
    $('.edit').click(function() {
        var href = $(this).attr("href");
        var test = getUrlVars(href)["id"];
        alert(test);
    });
});

補足: 2 番目のものを変更することもできます。どちらも同じ仕事をします。

于 2012-10-04T12:20:12.953 に答える
1

あなたの問題の代わりに、のid部分をパラメーターhrefに入れてdataそれを読んでみませんか? URLを分析する必要がなくなります。これを試して:

<ul>
    <li><a href="edit.php?id=5" data-id="5" class="edit">click here</a></li>
    <li><a href="edit.php?id=6" data-id="6" class="edit">click here</a></li>
    <li><a href="edit.php?id=7" data-id="7" class="edit">click here</a></li>
    <li><a href="edit.php?id=8" data-id="8" class="edit">click here</a></li>
</ul>
$('.edit').click(function(){
    var id = $(this).data("id");
    alert(id);
});
于 2012-10-04T12:20:14.547 に答える
0

これを試してください:

function getParameterByName( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return decodeURIComponent(results[1].replace(/\+/g, " "));
}
于 2012-10-04T12:18:37.297 に答える
0

初めてvarsオブジェクトとして宣言して を取り除くだけですvars.push(...)

これが実際の例です - http://jsfiddle.net/KN9aK/1/show/?id=yoursuperduperid

ソースはこちらhttp://jsfiddle.net/KN9aK/1/

于 2012-10-04T12:24:12.217 に答える
0

配列ではなくオブジェクトを使用するように変更してください。

function getUrlVars() {
    var vars = {}, //<--object
    hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1)
                                     .split('&');
    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars[hash[0]] = hash[1];  //<--add to the object
    }
    return vars;  //<--return the object
 }

またwindow.location.search、その初期スライスを行う必要がないように使用できます。

于 2012-10-04T12:26:56.453 に答える