4

HTMLに通常のリンクがある場合は、jQueryのattr関数を使用してそのhref属性の値を取得できます。

<a id="testLink" href="test/link.html">Test Link</a>`

>>> $('#testLink').attr('href');
testLink.html

例:

ただし、リンクがjQueryを使用して作成された場合、IE 7では、この関数は、リンクをクリックした場合にブラウザーがアクセスする絶対URLを返します(例:https ://stackoverflow.com/questions/ask/testLink.html ) 、href属性のリテラル値の代わりに。

例:

、、、も試しましたが、thisすべて絶対URLを返します。this.hrefthis.getAttribute('href')

hrefIE 7でjQueryによって作成されたリンクの属性のリテラル値を取得する方法はありますか?

4

3 に答える 3

4

jQuery が強制的に使用する方法でリンクを作成している場合、リンクは.innerHTML正しく機能しません。このドキュメントは次の場所にあります: http://api.jquery.com/html/ (また http://api.jquery.com/ jQuery/#creating-new-elements ) :

このメソッドは、ブラウザーの innerHTML プロパティを使用します。一部のブラウザーは、提供された HTML ソースを正確に複製する DOM を生成しない場合があります。たとえば、バージョン 8 より前の Internet Explorer はリンクのすべての href プロパティを絶対 URL に変換し、バージョン 9 より前の Internet Explorer は別の互換性レイヤーを追加しないと HTML5 要素を正しく処理しません。

これを修正するには、jQuery が使用することを強制しない方法でリンクを作成します.innerHTML

$('#test').append( $("<a>", {href: "test/link.html", text: "Test Link"}));

http://jsfiddle.net/xtrEB/12/

于 2012-07-01T16:43:29.573 に答える
1

少なくともIE7では不可能だと思います。JQuery は を使用しinnerHTML、IE はレンダリング時に href 属性を完全修飾ドメイン名 (FQDN) に書き換えるようです (以前のバージョンの IE ではそうすることが知られています)。そのため、リテラル値はレンダリング時に失われます。パスがわかっている場合は、文字列の式を使用して、URL などからドメインを削除して、パスを見つけようとすることができます。または、可能であれば、IE < 8 をすべて忘れてください。

この記事はいくつかの光を当てるかもしれません

プレーンな JavaScript と DOM メソッドを使用して要素を追加すると、IE7 でもリテラル値を取得できます。このjsfiddleを参照してください

于 2012-07-01T16:39:11.480 に答える
0

これを試して:

$('a').click(function () {
    var hrf = this.href;
    alert('this.href: \n' + hrf.slice(hrf.lastIndexOf('/')+1, hrf.length) );
    return false;
});

http://jsfiddle.net/xtrEB/5/

于 2012-07-01T16:24:56.990 に答える