0

私のjavascript関数の1つでは、jqueries .attrメソッドを使用して、ページ付け値からhref値を取得しています。呼び出しは単純です

$(".pager").click(function(){
    var start = $(this).attr('href');
    alert("START: " + start);
}

htmlは次のようになります。

<a href="#10" class="pager"><span class="page_no">2</span></a>
<a href="#20" class="pager"><span class="page_no">3</span></a>
...

FFとChromeの両方で、開始値が10と表示されます(最初のhrefをクリックします)。IEでは、HTML全体を返します(例)

mysite/search_results.php#10

私も次のように部分文字列を使用してみました:

var start = $(this).attr('href').substr(1);

しかし、これは私のアドレスの最初の文字を除いたURLも返しました:

ysite/search_results.php#10

何か考えや提案はありますか?

4

5 に答える 5

2

これを試して:

$(".pager").click(function(){
    var hashSplit = this.href.split('#');
    var start = hashSplit[hashSplit.length -1];
    alert("START: " + start);
});

フィドル: http://jsfiddle.net/maniator/PCJEF/

テストしましたが、IEで動作します

于 2011-07-20T14:39:05.187 に答える
1

次のようなことができます

if ($.browser.msie) {
    var start = $(this).attr('href').slice($(this).attr('href').indexOf('#')+1));
} else {
    var start = $(this).attr('href');
}

このコードはテストされていないか正確ではありませんが、要点はわかります。IE を使用している場合は、「#」の位置を取得し、そこから末尾までの部分文字列を取得します。それ以外の場合は、href の値全体を使用します。

于 2011-07-20T14:37:28.253 に答える
0

IEはばかげています、これをしてください:

var start = $(this).attr('href').replace(document.location.pathname,'');
于 2011-07-20T14:35:48.367 に答える
0

これは、URL を返すときの JavaScript のデフォルトの動作に関係している可能性があります (画像 src と同様に、フル パスを返します)。# でjavascript 分割メソッドhttp://www.w3schools.com/jsref/jsref_split.aspを使用して、値を取得してみてください。# で分割され、含まれないため、Chrome と FF では 10,20 も返されるはずです。2 番目の部分は常に次の数値になります。

   var s = $(this).attr('href').split('#')[1];
   alert(s);
于 2011-07-20T14:37:11.527 に答える
0

attr メソッドはブラウザー間の違いを減らすことを目的としていますが、JQuery のサイトにあるように、常にそうであるとは限りません。

ブラウザ間の一貫性: 一部の属性の値は、ブラウザ間で一貫性がなく、1 つのブラウザのバージョン間でも一貫性がありません。.attr() メソッドは、このような矛盾を軽減します。

したがって、これはその可能性を減らすだけです。それはそれを排除しません。

だから、それを修正するために私が見ることができる唯一の方法は、TommyBsの答えがこのコードを使用して約束しているように見える誰かの答えを使用することだと思います:

 var s = $(this).attr('href').split('#')[1];

ここに解決策のあるフォーラムがあります: http://www.sitepoint.com/forums/javascript-15/jquery-href-value-problem-665692.html

于 2011-07-20T14:43:09.537 に答える