AJAX изменить содержание страницы - PullRequest
0 голосов
/ 10 октября 2009

Я использовал AJAX для успешного изменения содержимого веб-страницы. Я могу добавить другую веб-страницу из своего домена, но проблема в том, чтобы заставить работать гиперссылки. Если гиперссылки используют относительную адресацию, то это не сработает относительно страницы, в которую я включаю ее, поэтому я исследовал php для анализа тега html, когда я читал его в

Я использую следующий RegExp /href[\s]?=[\s\"\']+(.*?)[\"\']/im, чтобы найти данные href, но мне нужен указатель на то, как я могу добавить префикс относительного адреса.

Я хотел бы заменить ссылку href = "./ test1 / page1.html"
на странице http: // foo.bar.com/folder1/info1/data.html с href = " http: // foo.bar.com/folder1/info1/./test1/page1.html"
тогда, если я включу содержимое страницы / folder1 /info1/data.html в http://foo.bar.com/folder2/faraway/another.html ссылки на встроенной странице будут работать правильно Я смотрел на использование функции php preg_replace для этого, но очень быстро отклеился. Если я лаю не на том дереве и есть более подходящий инструмент или подход, может кто-нибудь, пожалуйста, укажет мне правильное направление ;-). Может быть, все это может быть в Javascript?

Ответы [ 4 ]

2 голосов
/ 10 октября 2009

Если вы планируете делать намного больше JavaScript на странице, вы можете использовать JQuery.

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

Замените "#embedded" на идентификатор вашей встроенной страницы.

Это почти наверняка излишне, если вы не собираетесь использовать javascript для чего-либо еще, но если вы планируете создать блестящую динамическую страницу Ajaxy, вы можете посмотреть на нее.

Бонус: Загрузка страницы ajax с помощью JQuery:

$("#embedded").load(page_you_want_to_load)
2 голосов
/ 10 октября 2009

Если вы еще больше откликнетесь на ответ ABentSpoon, ваш селектор jQuery сможет найти все теги привязки, начинающиеся с косой черты.

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

Для получения дополнительной помощи по селекторам jQuery, перейдите здесь .

0 голосов
/ 11 октября 2009

Вы, ребята, конечно, помогли мне здесь, большое спасибо. Я думаю, что регулярное выражение, которое мне нужно, было бы /href[\s]?=[\s\"\']\./is, как указывал ABentSpoon: «Если оно начинается с косой черты, этого достаточно для большинства целей». Однако, я думаю, было бы неплохо включить чтение страниц с других сайтов. К счастью, любая из страниц, с которой я, возможно, захочу это сделать, находится на одном сайте и на одном сервере.

Получить комментарий от Jeroen, просто указав абсолютные пути, на самом деле это не вариант, так как на этом сайте много страниц. Кроме того, каждая страница будет адресована по-разному (DNS) в зависимости от того, откуда она будет доступна ... внутри или снаружи. Если вы даете своим ссылкам абсолютный путь, вы привязываете ВСЕ их к DNS-имени этого сайта. Проблема, когда вы обнаруживаете, что это меняется слишком регулярно, или, если на то пошло, департаменты чувствуют необходимость изменить имена трех подкаталогов, но это уже другая история. Я хочу, чтобы эта функция была более гибкой.

Я обязательно прочту о jQuery. Выглядит интересно, это не то, с чем я играл еще ... больше обучения; -)

Еще раз спасибо, что нашли время, ребята.

0 голосов
/ 10 октября 2009

Почему вы просто не используете абсолютные пути?

...