0

AJAXを使用して、Webページのコンテンツを正常に変更しました。ドメインから別のWebページを含めることはできますが、問題はハイパーリンクを機能させることです。ハイパーリンクが相対アドレス指定を使用している場合、それは私がそれを含めているページに対しては機能しないので、私はそれを読んでいるときにhtmlタグを解析するためにphpを調査していました

次の正規表現を使用し/href[\s]?=[\s\"\']+(.*?)[\"\']/imてhrefデータを検索していますが、相対アドレスのプレフィックスを付ける方法についてのポインターが必要です。

http://foo.bar.com/folder1/info1/data.htmlのリンクhref="./test1/page1.html"
を href= " http://foo.bar.comに置き換えたい/folder1/info1/ ./test1/page1.html "次に、/folder1/info1/ data.htmlのページコンテンツをhttp://foo.bar.com/folder2/faraway/another.htmlリンクに含めると埋め込まれたページでは正しく機能します。phppreg_replace関数を使用してそれを行うことを検討していましたが、すぐに機能しなくなりました。私が間違った木を吠えているときに、より適切なツールやアプローチがある場合は、誰かが私を正しい方向に向けてください;-)。たぶんそれはすべてJavascriptでダウンする可能性がありますか?

4

4 に答える 4

2

ページ上でさらに多くのJavaScriptを実行することを計画している場合は、JQueryを使用できます。

function make_absolute(base_path){
    $("#embedded a").each(function(){
        this.attr("href",
                  base_path + this.attr("href")
                  );
    });
}

「#embedded」を埋め込みページのIDに置き換えます。

javascriptを他の目的で使用しない場合、これはほぼ間違いなくやり過ぎですが、光沢のある動的なajaxyページを作成することを計画している場合は、それを調べることができます。

ボーナス:JQueryでajaxページの読み込みを行う:

$("#embedded").load(page_you_want_to_load)
于 2009-10-09T23:50:16.700 に答える
2

ABentSpoonの応答をさらに一歩進めると、jQueryセレクターはスラッシュで始まるすべてのアンカータグを検索できます。

$('#embedded a[@href^=/]').each(function() {
    $(this).attr('href', baseUrl + $(this).attr('href'));
});

jQueryセレクターの詳細については、こちらをご覧ください。

于 2009-10-10T03:42:32.853 に答える
0

絶対パスだけを使ってみませんか?

于 2009-10-09T23:32:36.453 に答える
0

皆さんは確かにここで私を助けてくれました、どうもありがとう。私が必要とする正規表現は/href[\s]?=[\s\"\']\./is、ABentSpoonが「スラッシュで始まる場合、ほとんどの目的には絶対に十分です」と指摘したとおりだと思います。しかし、他のサイトからページを読むことができるようにするのは良い練習になると思います。幸いなことに、これを実行したいページはどれも同じサイトと同じサーバーにあります。

絶対パスを使用するというJeroenのコメントを取り上げるには、このサイトには多くのページがあるため、これは実際にはオプションではありません。また、各ページは、内部または外部からアクセスされる場所に応じて、異なるアドレス(DNS)になります。リンクに絶対パスを指定すると、すべてのリンクがそのサイトのDNS名を持つようになります。これがあまりにも定期的に変更されていることに気付いた場合、またはそのことについては、depatmentsがサブディレクトリ名を変更する必要があると感じた場合の問題ですが、それは別の話です。この機能をもう少し柔軟に設計したいと思います。

私は確かにjQueryについて読みます。興味深く見えます、それは私がまだ遊んだものではありません...もっと学ぶことが近づいています;-)

時間を割いていただきありがとうございます。

于 2009-10-10T20:42:35.250 に答える