2012-01-09 3 views
2

Я ищу, чтобы использовать jQuery, чтобы определить, изменилась ли текущая страница вверх по течению, и если да, выполните некоторые действия.Использование jQuery в данных ответа AJAX

Я хочу сделать это с помощью селекторов jQuery по данным, возвращаемым вызовом AJAX (для целей этого вопроса моя «страница изменилась», метрика будет «имеет значение первого <h1> изменено»).

Таким образом, я нахожу, что хочу использовать селектор jQuery по HTML, возвращаемый AJAX get(). «Лучший» «решение» я нашел до сих пор является добавление данных в какой-то скрытый DIV, и с помощью селектора над этим, как показано ниже:

var old_title = $('h1').html(); 

$.get(url, function(data) { 
    $('#hidden_temporary_storage').append(data); 
    var new_title = $('#hidden_temporary_storage h1').html(); 
    if (new_title !== old_title) { 
     do_something(); 
    } 
}); 

Это чувствует себя так очень неправильно - я бы вложенности html/head/body, и там будут столкновения id и так далее.

У меня нет контроля над восходящей страницей, поэтому я не могу просто «получить данные в более удобном формате», увы.

+0

В идеале вы бы не запрашивали данные, которые вам не нужны. Если возможно, попробуйте ответить на запрос в соответствии с вашими потребностями. – kontur

+0

В соответствии с последней строкой «У меня нет контроля над восходящей страницей» –

+0

arghh ... когда я научусь читать! Мой плохой :) – kontur

ответ

3

Вы можете сделать:

var x = $('<div>'+data+'</div>').find('h1').html(); 
// use x as you like 

то вам не нужно добавлять возвращаемых данных на страницу, чтобы быть в состоянии получить свойства и значение из HTML-элементов, определенных в нем. Таким образом, не было бы никаких коллизий id, нескольких тегов заголовка/тела и т. Д.

+0

Я просто пробовал, и он не работает. $ ('

bob
') .find ('. Тото'). HTML() (возвращает нулевое значение) –

+0

'$()' обнажает головку, тело и т.д .. и возвращает только список элементов внутри тело строки HTML. Например: '$ ('

Hello

')' возвращает список из 2 объектов, а именно h1 и div с классом toto. – techfoobar

+0

Да, и если вы попытаетесь найти что-то в нем $ (htmlstring) .find ('. Myclass'), он вернет null;) –

1

Я думаю, что лучше всего использовать iFrame. И затем используйте jQuery для содержимого этого iFrame.

var old_title = $('h1').html(); 

$.get(url, function(data) { 
    $('<iframe id="tmpContent"></iframe>').appendTo("html"); 
    $('#tmpContent').contents().find('html').html(data); 
    var new_title = $('#tmpContent').contents().find('h1').html(); 
    if (new_title !== old_title) { 
     do_something(); 
    } 
    $('#tmpContent').remove(); 
}); 
+0

Конечно,' iframe' будет намного лучше, не так ли! –