Thanks Remi for parsing out the related code and explaining it all. It actually makes perfect sense, and I understand most of it, but I don't see why my site appears to be replacing the <UL> not just the ... wait a minute... I think it just clicked!
My 'page' is: <div id="players" title="Players" class="panel"> <h2>Confirmed Players</h2> <ul> <li>...</li> ... </ul> ... <ul><li><a target="_replace" href="getPendingFrag.php">Show Pending Players</a></li></ul> <ul><li><a target="_replace" href="getCancelledFrag.php">Show Cancelled Players</a></li></ul> </div> Therefore the function steps back to the <div> as 'page' and the <ul> as the 'parent'. It deletes the entire <ul> and then adds the frag... Which explains why I had to add <ul> tags to my frags. So if I understand it correctly now, it "replaces" an immediate child element of the page element regardless if that element is the immediate parent of the link. What I was expecting was that it would always "replace" the immediate parent of the link... which would make more sense to me... but maybe there is rational I don't know about as to why it is the way it is. Thanks again for providing the insight. Jeff On Monday, February 25, 2013 4:15:00 AM UTC-7, Remi Grumeau wrote: > Hi Jeff, > Yes, it is misleading… > > > Let's dig inside the all process! > > > First, the on click event, which detects if the target="_replace" exists > (line 612) > > > if (link.target == "_replace") > { > followAjax(link, link); > } > > > Then it goes to (line 685) > > > function followAjax(link, replaceLink) > { > link.setAttribute("selected", "progress"); > iui.showPageByHref(link.href, null, "GET", replaceLink, function() { > link.removeAttribute("selected"); }); > } > > > So as you can see, when it goes to followAjax, link & replaceLink are the > exact same. > (if no target set, it loads followAjax(link, null); so there is a difference > between a replace call or not) > > > inside iui.showPageByHref (line 261) > > > if (replace) > { > replaceElementWithFrag(replace, frag); > iui.busy = false; > } > else > { > iui.insertPages(frag); > } > > > This is where the difference is done (but in both case an ajax call is done > on the HREF value). > in followAjax, we send replaceLink which is known as replace in here. > frag is what the Ajax call returns. > > > Then in replaceElementWithFrag (line 1020) > > > function replaceElementWithFrag(replace, frag) > { > var page = replace.parentNode; > var parent = replace; > while (page.parentNode != document.body) > { > page = page.parentNode; > parent = parent.parentNode; > } > page.removeChild(parent); > > > var docNode; > while (frag.firstChild) { > docNode = page.appendChild(frag.firstChild); > sendEvent("iui.afterinsert", document.body, > {insertedNode:docNode}); > } > sendEvent("iui.afterinsertend", document.body, {fragment:frag}) > } > > > > > var page = replace.parentNode; > var parent = replace; > > > First line, a "page" variable is set using the parent node of the "replace" > target. "replace" is the <a> element so its parent is the <li>. > Second line, "parent" equals the <a> element. > That's what is misleading, but we have no choice. Otherwise the fragment > would replace the <a> element inside the <li>, which wouldn't serve any > purpose. That's why it goes to the parentNode, which should be the <li> > element if properly used inside a ul / li list. > > > while (page.parentNode != document.body) > { > page = page.parentNode; > parent = parent.parentNode; > } > > > The while loop goes back in parent nodes down to the body child node (aka the > page). > > > So if your page is > <body> > … > <ul id="my page" title="My Page"> > <li><a href="#page1">Link 1</a></li> > <li><a href="#page2">Link 2</a></li> > <li><a href="myfrag.html" target="_replace">Load more</a></li> > </ul> > … > </body> > > > Since there is only one node step between the <li> ("page variable") and the > UL that creates your page, this while loop will only execute once. > So the variable "page" is now the UL DOM element, "parent" is the <li> > element. > > > page.removeChild(parent); > > > The LI element containing the clicked <a> is removed from the UL > > > var docNode; > while (frag.firstChild) { > docNode = page.appendChild(frag.firstChild); > sendEvent("iui.afterinsert", document.body, {insertedNode:docNode}); > } > > > This parses the fragment returned by the Ajax call and adds each first level > Node into the "page" node. > So here, it adds each first level Node inside the UL (and send a callback > event "afterinsert" with the inserted fragment each time) > Which means your fragment HTML should contains LI elements. > > > <li><a href="#page3">Added link to page 3</a></li> > <li><a href="#page4">Added link to page 4</a></li> > <li><a href="myfrag2.html" target="_replace">Load more again</a></li> > > > > > Note that it does not replace the LI but remove the LI, then adds the Ajax > content to the list. Since the clicked link is the last element of the UL, it > feels like it has been replaced. But it's not. And this is misleading, i'm > agree. > > > Note also that since the LI element containing the "load more" link is > removed, you have to add it too inside the fragment if you need to add some > more again. > > > > > > > Hope this helps! > > > Remi > > > > > > Le 25 févr. 2013 à 10:51, "Jeff (iUI Noob)" <fjr...@gmail.com> a écrit : > I'm a little bit confused on how this works. I understand that iUI will do an > AJAX call, but... > The Documentation says that iUI will "replace the panel that the link is in" > but somewhere in here Remi states that it will "replace the contents of the > element the link is in" (or something like that,) and the example in the > link-types.html file replaces a <li> element with a series of <li> elements > in the frag file. Maybe I'm misunderstanding what is meant by "panel" in the > docs but that was just the start of my confusion. > Now, when I attempted to use the attribute, within a panel class div, I > created an unordered list containing a single list item, the link, and a > frag.php file that created several list items. When I touched the link, it > did replace the link with the output of the frag file, but the output had no > style. Adding a <ul>...</ul> to the file output solved the problem. So it's > working, but why did I need to add the unordered list tags to the Frag? Is it > because the process 'steps' back to them because they have no other content? > > -- > You received this message because you are subscribed to the Google Groups > "iPhoneWebDev" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to iphonewebdev...@googlegroups.com. > To post to this group, send email to iphone...@googlegroups.com. > Visit this group at http://groups.google.com/group/iphonewebdev?hl=en. > For more options, visit https://groups.google.com/groups/opt_out. -- You received this message because you are subscribed to the Google Groups "iPhoneWebDev" group. To unsubscribe from this group and stop receiving emails from it, send an email to iphonewebdev+unsubscr...@googlegroups.com. To post to this group, send email to iphonewebdev@googlegroups.com. Visit this group at http://groups.google.com/group/iphonewebdev?hl=en. For more options, visit https://groups.google.com/groups/opt_out.