Autor Zpráva
uestla
Profil
Dobrý večer.

Používám Nette a jQuery a pravidelně posílám AJAXové požadavky. Při odpovědi získávám HTML všech překreslených oblastí (snippetů). To, co chci, je zkontrolovat, pokud se HTML řetězec, který dorazil ze serveru, shoduje s HTML obsahem elementu, ke kterému se váže, a pouze v případě, že se budou lišit, objekt překreslit (za použití efektu - který by právě při zachovaném obsahu nebyl moc žádaný).

// v  proměnné html mám HTML řetězec, v id pak ID daného elementu

// bohužel prosté srovnání
$('#' + id).html() === html
// nefunguje podle očekávání...


Zkoušel jsem i různé serializace v jQuery, ale bezúspěšně :-(

$('#' + id).serialize() === $(html).serialize() // nefunguje správně
$('#' + id).serializeArray() === $(html).serializeArray() // rovněž nefunguje


Dokázal by mi prosím někdo poradit?
Předem děkuji.
ah01
Profil
Porovnávat přímo HTML (ukázka 1) pochopitelně nepůjde, protože volání .html() ti vrátí innerHTML což je hodnota již zpracovaného HTML, které má prohlížeč v paměti (s jinou velikostí písmen tagů, s opravenými syntaktickými chybami a podobně).

serialize a serializeArray pracuje s formuláři, takže pokud tě zajímá něco víc než hodnoty ve formuláři, tak tudy taky cesta nevede. Nehledě na to, že tímto (řádek 2) způsobem porovnávat obsah pole nejde.

Nejjednodušší asi bude, nechat nové HTML zpracovat prohlížeč (aniž bys ho vkládal do stránky) a porovnat výsledek s tím co máš ve stránce.

var newHtml = $("<div>", {"html": html}).html(),
    oldHtml = $("#" + id).html();
    
if (newHtml != oldHtml) …
uestla
Profil
Skvělý nápad! Sice to není nejvýkonnější, ale problém to řeší, moc děkuji :-)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: