1

ユーザーがサイトの用語集の単語にカーソルを合わせたときに、qTip を使用して一部のコンテンツを AJAX に変換しています。AJAX 応答には、サイト上の他のファイルへの相対リンクが含まれることがあります。問題は、AJAX 応答のリンクが、コンテンツが呼び出されたページではなく、ユーザーがいる現在のページから解決しようとすることです。

ユーザーはページにいます<site>/topics/flying/missTheGround.html。ユーザーがホバーする用語集の用語があり、AJAX 呼び出しが行われ、からコンテンツがプルされ<site>/glossary.htmlます。AJAX 応答には、サイト内の別のファイル (たとえば、topics/swimming/drownLess.html. AJAX 応答のリンクをクリックすると、FROM 現在のページを解決しようとするため、次のようになります<site>/topics/flying/topics/swimming/drownLess.html

AJAX 応答を変更するにはどうすればよいですか? 変更する必要があるのは 2 点です。

  1. 応答内のローカル アンカー リンクは、ユーザーを現在のページから用語集ページ (正しいターゲットを指す) にリダイレクトする必要があります。
    • 「#」で始まる href を見つけ、ローカル ターゲット リンクを へのリンクに変更する文字列を追加します<site>/glossary.html#<whatever the link target was>
  2. 応答内の相対リンクは、ユーザーを現在のページからリンクされたページの正しい場所にリダイレクトする必要があります。
    • 「トピック」で始まる href を見つけて、ターゲットを絶対 (ルートから) に変更する文字列を追加します。<site>/topics/running/goFast.html

私のAJAXコード:

content: {
    text: 'Loading...',
    ajax: {
        url: '<local file> #' + $(this).text().toLowerCase(),
        success: function (elems) {
            if (elems.length) {
                this.set('content.text', elems);
                var $elems = $(elems);
            } else {
                this.destroy();
            }
        }
    }
},
4

1 に答える 1

1

次のように 2 つの置換を行うことができます。

用語集を次のように置き換えます。

var glossaryUrl = "<mysite>/glossary.html";
$(elems).find('a[href^="#"]').each(function(i, link) {
    var originalLink = $(link).attr('href');
    $(link).attr('href', glossaryUrl + originalLink);
});

トピックを置き換えますか:

var topicsUrl = "<mysite>/";    // The trailing forward slash is important
$(elems).find('a[href^="topics"]').each(function(i, link) { 
    var originalLink = $(link).attr('href');
    $(link).attr('href', topicsUrl + originalLink);
});
于 2013-02-06T22:30:14.733 に答える