Autor | Zpráva | ||
---|---|---|---|
uestla Profil |
#1 · Zasláno: 25. 12. 2010, 20:37:26 · Upravil/a: uestla
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 |
#2 · Zasláno: 26. 12. 2010, 23:38:11
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 |
#3 · Zasláno: 27. 12. 2010, 20:54:27
Skvělý nápad! Sice to není nejvýkonnější, ale problém to řeší, moc děkuji :-)
|
||
Časová prodleva: 13 let
|
0