IE7 と他のすべてのブラウザでは .attr(“href”) の抽出が間違っていますか?
-
22-09-2019 - |
質問
というのは本当に本当なのでしょうか? 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 のバグなのでしょうか?
解決
それは確かです。のないの代わりにjQueryのバグが、.getAttribute('href')
のブラウザの矛盾の実装 - 。私は一貫性のためだけ.get(0).href
を使用することをお勧めします。
あなたは絶対URIをしたくない場合は、.get(0).getAttribute('href', 2)
を使用してIEとMozillaの属性テキストにアクセスすることができますように思えます。注しかし、この意志はないオペラでの作業と私はサファリ/ Chromeでテストしていない/何かます。
また.get(0).href
のために「#」上のドメインまたは分割を取り除くと、それも「#」(チェック.length
)が含まれていると仮定すると、アレイの第二の部分を使用することができます。
他のヒント
私はそれがすべてのIE 7 +でそのように実装されています信じています。
私が使用します:
var href=jQuery('#foo').attr('href');
href=href.substring(href.indexOf('#'));
希望、それが役立ちます! 乾杯ます。
私は、この問題に関連するバグを見つけました: http://bugs.jquery.com/ticket/2747 のjQueryのは、IE7「バグ」の回避策を実施しました。しかし、jQueryの1.7.1でこのバグを再導入しました。 私は1.7.1用の新しいバグを作成しました: http://bugs.jquery.com/ticket/11129
私が使用します:
var hrefArr = $(this).attr('href').split('/');
var id = hrefArr[hrefArr.length-1];
私は最後の後にすべてのものを必要とする「/".のp>
別の方法は、href の代わりに data 属性を使用することです。
<a data-href="#anchor-0">example</a>
.
var href = $(this).attr('data-href');
私は、その後のhrefの()メソッドストリップそれを置き換えるJavaScriptを使用して、PHP経由で変数を作成しまいました
<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>
問題は、IE7とIE8は、テキストを変更することです。良い回避策は、この
のように行うことですので、$('#linkId').attr('href','newlink').text('oldtext');