30

attr("href")リンクのコマンドがIE7で他のすべてのブラウザーと比較して非常に異なって処理されるというのは本当に本当ですか?

http://example.com/page.htmlにページがあり、次のHTMLがあるとします。

<a href="#someAnchor" class="lnkTest">Link text</a>

そしてこのjQuery:

var strHref = $(".lnkTest").attr("href");

次に、IE7ではstrHref変数の値はになります"http://example.com/page.htm#someAnchor"が、他のブラウザーではになります"#someAnchor"

最後に述べたケースが最も正しいケースだと思いますが、それはIE7が悪い子である場合だけですか、それともjQueryのバグですか?

4

7 に答える 7

18

これは確かにjQueryのバグではありませんが、代わりにブラウザの一貫性のない実装.getAttribute('href')-.get(0).href一貫性のためだけに使用することをお勧めします。

.get(0).getAttribute('href', 2)絶対URIが必要ない場合は、を使用してIEとMozillaの属性テキストにアクセスできるようです。ただし、これはOperaでは機能せず、Safari /Chrome/その他ではテストしていないことに注意してください。

ドメインを削除するか、「#」で分割して.get(0).href、配列の2番目の部分に「#」が含まれていると仮定して使用することもできます(チェック.length)。

http://www.glennjones.net/Post/809/getAttributehrefbug.htm

于 2009-10-20T08:31:53.000 に答える
4

すべてのIE 7+でそのように実装されていると思います。

私が使う:

var href=jQuery('#foo').attr('href');
href=href.substring(href.indexOf('#'));

それが役に立てば幸い!乾杯。

于 2011-07-14T16:52:53.043 に答える
2

この問題に関連するバグを見つけました:http://bugs.jquery.com/ticket/2747jQueryはIE7の「バグ」の回避策を実装しました。ただし、jQuery 1.7.1では、このバグが再導入されました。1.7.1の新しいバグを作成しました:http://bugs.jquery.com/ticket/11129

于 2012-01-05T09:31:19.473 に答える
1

私が使う:

var hrefArr = $(this).attr('href').split('/');
var id = hrefArr[hrefArr.length-1];

最後の「/」の後のすべてが必要な場合。

于 2010-04-21T08:48:39.457 に答える
1

もう 1 つの方法は、href の代わりにデータ属性を使用することです。

<a data-href="#anchor-0">example</a>

.

var href = $(this).attr('data-href');
于 2013-01-28T13:54:37.833 に答える
0

最終的に PHP 経由で変数を作成し、javascript の replace() メソッドを使用して、href から変数を削除しました。

<script>var domain = 'http://<?=$_SERVER['HTTP_HOST']?>';</script>

<script>
$(function(){
/* prevent default action of all anchors with hash class */
$('#canvas').on('click', 'a.hash', function(event) {
    event.preventDefault();
            // get the href of the anchor
    var hash = '!' + $(this).attr('href');
            // remove the absolute url if it exists
    hash = hash.replace( domain, '' );
    // redirect
            window.location.hash = hash;
});
});
</script>
于 2012-03-27T05:34:37.570 に答える