Как загрузить фоновое изображение с другой страницы? - PullRequest
1 голос
/ 21 мая 2010

Я создаю страницу, которая загружает контент с других страниц, используя jQuery, например:

$('#newPage').load('example.html' + ' #pageContent', function() {
    loadComplete();         
});

Это все отлично работает.

Теперь я хочу изменить фоновое изображение текущей страницы на фоновое изображение страницы, с которой я загружаюсь.

Это то, что я делаю сейчас, но я не могу заставить себя работать:

$.get('example.html', function(data) {

    var pageHTML = $(data);
    var pageBody = pageHTML.$('body');
    alert(pageBody.attr("background"));

});

Что я делаю не так ??

Спасибо
-Бен

Ответы [ 5 ]

1 голос
/ 24 мая 2010

Спасибо всем вам за ваши ответы.

Я запустил другой поток здесь в надежде, что смогу сделать это по-другому, и я получил рабочий раствор от Симен Эххольт ради люди, ищущие здесь это:

Я собрал регулярное выражение для этого, который будет искать строку данных переменная (содержащая HTML) для Фоновый атрибут тега body. Регулярное выражение украдено отсюда и немного изменен. Я все еще новичок в регулярное выражение, так что я думаю, что это может быть сделано больше бегло, но все равно получает работу сделано

var data = /* your html */;
var regex = /body.*background=["']?((?:.(?!["']?\s+(?:\S+)=|[>"']))+.)["']?/;
var result = regex.exec(data);
if (result.length > 1) {
    var background = result[1];
    alert(background);
}
else {
    //no match
}

Если вы использовали этот ответ, пожалуйста, проголосуйте за него здесь !

Еще раз спасибо!
-Бен

1 голос
/ 21 мая 2010

Когда вы генерируете объект jQuery из HTML, он игнорирует такие теги, как html, head и, что более важно, body. Если, например, ваша страница example.html содержала следующий html:

<html>
    <body>
        <div>
            <p>Text</p>
        </div>
    </body>
</html>

тогда ваш объект jQuery, сгенерированный при выполнении var pageHTML = $(data), будет основан на div. Чтобы получить атрибут элемента body, вам нужно иметь дело с data в виде строки, которую вы запросили здесь :)

(Что ж, вы могли бы сделать некоторые замены строки ниндзя и преобразовать теги <body> и <html> в data, например, в div, но выполнение поиска по строке в регулярном выражении будет быстрее и стабильнее)

1 голос
/ 21 мая 2010

Обновление: измените фоновое изображение на CSS: style="background-image: url(...)" Я думаю, что способ, которым вы пытаетесь сейчас, не достигнет атрибута background.

Старый ответ:

background - стенография.Попробуйте

pageBody.attr("backgroundImage");

Я никогда не видел, чтобы полная структура HTML проходила через Ajax-запрос, но пока она не вставлена ​​в DOM, все будет хорошо.

Если этоОказывается, проблема заключается в структуре HTML, подумайте о создании элемента iframe на лету, загрузке страницы в него и затем получении свойства backgroundImage оттуда.

0 голосов
/ 21 мая 2010

Разве эта строка не выдает ошибку?

var pageBody = pageHTML.$('body');

Должно быть что-то вроде этого:

var pageBody = $('body', pageHTML);
0 голосов
/ 21 мая 2010

Я думаю, что проблема в том, что когда вы загружаете данные с другого сайта, вы на самом деле просто загружаете HTML, а не загружаете другой DOM, для которого вы можете делать такие вещи, как поиск атрибутов, например background.

Что касается фактического решения вашей проблемы, я не совсем уверен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...