javascript - jQuery complete replace DOM of element with another DOM - faster way? -
i'm using jquery's ajax getting new content server. data loaded in json:
$.ajax({ url: url, data: { 'ajax': '1', }, datatype: 'json', success: somefunction }); for server-side application limitation, i'm not able setup more json variables inside have load content. why have load result jquery, search , replace elements on page, (used in somefunction):
var somefunction = function(data) { var con = $('<div></div>').html(data.content); // $(data.content) not working $('div#maincontent').html(con.find('div#ajax-content').html()); ... // same process 3 more divs } edit: please, note have same process replace 3 divs!
there more that, example, it's enough hope. question: logic way, expect loading result dom ($(data.content)), parsing html (con.find('dix#ajax-content').html()) , dom ($('div#maincontent').html()) seems me loosing resources , decreasing perfomance know if there faster way , load dom directly, like:
$('div#maincontent').dom(con.find('div#ajax-content').dom()); i tried google maybe don't know type in. jquery documentation not helped me lot.
some facts:
- jquery 1.9.1
- jquery ui 1.10.3 available
finally, know more better server-side app provide more json variables, however, need write not-so-easy peace of code requiring longer time develop don't have right now. doing on client side temporary solution now, however, don't want decrease performace lot.
side-question:
is correct use find() function in case or there better one?
edit 2 (not working parsing string) i'm expecting working it's not:
content = '<div id="ajax-title">pečivo běžné, sladké, slané</div> <div id="ajax-whereami"><a href="/category/4">chléba pečivo</a> » pečivo běžné, sladké, slané</div>'; $(content);
actually, $(data.content) should work fine, have keep in mind the top level elements can reached via .filter() instead of .find(). if elements wish target @ least 1 level deeper root should use .find() though; in examples below can replace .filter() .find() appropriate.
var $con = $(data.content); $('div#maincontent') .empty() .append($con.filter('div#ajax-content')) .append($con.filter('div#another-id')) .append($con.filter('div#and-another-id')); you can combine selectors together:
.append($con.filter('div#ajax-content, div#another-id, div#and-another-id')); lastly, since identifiers should appear once inside document, can drop div part:
.append($con.filter('#ajax-content, #another-id, #and-another-id')); update
okay, seems jquery doesn't evaluate data.content when there newlines in wrong places; should work in cases:
var wrapper = document.createelement('div'); wrapper.innerhtml = data.content; var $con = $(wrapper);
Comments
Post a Comment