2013-03-28 2 views
5

Это, вероятно, простой, но я не могу найти свой ответ ...JQuery - получить текст HTML вернуться

у меня есть вызов Ajax, который возвращает HTML

dataType: "html" 

и он вернулся " сообщ»выглядит следующим образом:

<div id="x"><p>Hello</p></div> 

и получает дом, добавляемого в верхней части родительского DIV:

ajax call... 
request.done(function(msg) { 
    $('#parent').prepend(msg); 
} 

Проблема в том, что я НЕ ДОЛЖЕН выполнять эту манипуляцию с dom, если текст не изменился (так как есть другие эффекты, которые происходят, которые я урезал. (Это уведомление, которое проверяет наличие обновлений в интервале)

так, что я хочу сделать, это найти «Hello» в пределах msg и сравнить его с текущим div x's p, который уже может быть на странице. Эта вторая часть проста в обращении, но в первой части мне нужно сделать что-то вроде msg.text(), чтобы просто получить «Hello», но несколько вариантов, которые я попробовал, не удались.

указатели?

ответ

2

использование filter() найти текст ..

попробовать это

$(msg).filter('div#x p').text(); //this will give you hello 

ИЛИ find()

$(msg).find('div#x p').text(); 
+0

Спасибо, но это не работает. Это дает мне пустую строку (пустое предупреждение). – briansol

+0

дает null ... interesting .. попробовал с 'find()', так как вы указали свой ответ как HTML .. find() - это еще один способ получить элемент из объекта ... $ (msg) .find ('div # x p'). text() '; – bipen

+0

find ('p') похоже, сделал трюк. благодаря! – briansol

0

попробовать этот

$('#parent').prepend($(msg).text()); 
0

Так вы можно сделать следующее:

Держите текст из запроса previus в переменной

var previusData; 

затем после первого запроса добавить, что данные в переменную, вы можете сделать это с помощью фильтра или как это:

previusData = $("#x p").html(); 

затем перед добавлением его в DOM сделать проверку путем добавления нового varible

request.done(function(msg) { 
    var currData = $("#x p").html(); 
    if(currData != previusData){ 
    $('#parent').prepend(msg); 
    } 
} 
0

Предполагая, что «уведомление» отсутствует при загрузке страницы, и оно появляется после загрузки страницы, вы можете использовать глобальную переменную (или пространство имен) для хранения предыдущего значения ответа и каждый раз, когда будет получен новый ответ, он против уже сохраненного ответа; отменить, если не изменить; или использовать, если изменилось и обновления глобальной переменной

var cached_response = ''; 
ajax call... 
request.done(function(msg) { 
    if(msg != cached_response){ 
     $('#parent').prepend(msg); 
     cached_response = msg; 
    } 
} 
+0

загружается inline на загрузку страницы. Это проверка обновления содержимого в полу реального времени. – briansol

0

Один из способов, вы можете использовать регулярные выражения формы, заменив все HTML-теги, как это:

$(document).ready(function() { 
    var text = '<div id="x"><p>Hello</p></div>'; 
    console.log(text.replace(/(<([^>]+)>)/ig,"")); 
}); 

Просто поместите эту строку в сценарии, и сравнить с данные.

Вот рабочий пример: http://jsfiddle.net/cGnG5/1/

И еще один способ использует .filter() функцию как сказано в другом ответе.

Смежные вопросы