Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I was able to solve this problem with the following approach. It was made possible by Mikkel's response so thank you for sharing that!</p> <pre><code>/* */ function prepareHeaderFooterForULDiving(pageName) { // dynamically move the header and footer between pages on load events $(document).bind('pagebeforeshow', function(event, ui) { // If the previous page length is zero then we couldn't possibly be drilling into a nested list this very moment if (ui.prevPage.length == 0) return; var pathname = window.location.pathname; var fullPath = $(location).attr('href'); //alert (pathname +" versus1 "+fullPath); // Don't add an extra header and footer to a page that doesn't need it // The pathname must end with the page name and the fullPath must NOT end with .php (all nested list pages will have extra pieces) var regex = new RegExp(pageName+"$"); if (pathname.match(regex) &amp;&amp; !fullPath.match(/.php$/)) { $headerObj = $('[id^=header]:last'); $footerObj = $('[id^=footer]:last'); // Since we find the latest header and footer (and since that latest one might be the one we want to display var beginningState = event.currentTarget.innerHTML; var beginningHeader = $headerObj[0].outerHTML; var beginningFooter = $footerObj[0].outerHTML; // Before we copy the header and footer, find out if we are copying a copy or not; if we are, // make sure we add special handling to get rid of the first copy when we hide the current page var alreadyHadClass = $headerObj.hasClass('to-remove'); // copy the code from the current header and footer but before you clone it, add the to-remove class to it; that way // we only end up removing the footers and headers that we have dynamically added! // Get the latest header and footer; there's a possibility the header would be grabbed from a prior loaded page that isn't presently visible (and with a misleading phrase) // Multiple layers of ULs could end up causing the wrong footer to be removed $headerObj.addClass('to-remove'); $footerObj.addClass('to-remove'); var header = $headerObj[0].outerHTML; var footer = $footerObj[0].outerHTML; // Now that we know that we are going to be drawing on this particular branch of the contactUs.php UL leaf, mark every previous // leaf (if applicable in higher or lower part of the tree) for immediate removal once the page is hidden // Do NOT do this before we clone if (alreadyHadClass) { $('.to-remove').addClass('removeOncePageHidden'); } // Remove the temporary designation; this way we don't accidentally remove contactUs.php's header when we return $headerObj.removeClass('to-remove'); $footerObj.removeClass('to-remove'); // Optionally, you could remove the auto-generated header (with the next ul's content); but I kinda like it // remove the jQuery Mobile-generated header //$('.ui-header').addClass('to-remove-now'); //$('.to-remove-now').remove(); // For some crazy reason this pagebeforeshow can be fired TWICE! Ridiculous I know; only update the screen if it doesn't // already look like that. Otherwise, you'll end up with a flashing of an instant where the first-added header and footer // display and then get removed during the pagehide if ( beginningState.indexOf(beginningHeader) != -1 || beginningState.indexOf(footer) != -1 ) { // this script has just been fired twice and the header that we copied we don't need any more; the page is fine except that we just removed the class that needs to stay there console.log("Didn't do it!"); $headerObj.removeClass('removeOncePageHidden'); $footerObj.removeClass('removeOncePageHidden'); } else if ( beginningState.indexOf(header) == -1 &amp;&amp; beginningState.indexOf(footer) == -1 ) { // prepend the header and append the footer to the generated HTML console.log("weird: "+header+"\nbut the kicker: "+beginningState); event.currentTarget.innerHTML = header + event.currentTarget.innerHTML + footer; } else { // We didn't just create a new one so undo the addition of the 'remove it now' Class; we'll // go ahead and keep it since this code has been fired twice now for one page load console.log("whoah"); $headerObj.removeClass('removeOncePageHidden'); $footerObj.removeClass('removeOncePageHidden'); } } }); $(document).bind('pagehide', function(event, ui) { $('.removeOncePageHidden').remove(); var fullPath = $(location).attr('href'); //alert ("Should we remove anything here: "+fullPath); // We only need to run this code when we're navigating into a page that is a top-level page (nested-list-generated pages have 'fun' characters appended beyond the .php) if (fullPath.match(/.php$/)) { //alert("Removing all to-removers"); $('.to-remove').remove(); } }); } </code></pre> <p>This is my first foray into jquerymobile scripting so there could be some problematic aspect I'm not aware of but all my navigation attempts have succeeded at generating the behavior I was in search of. One curious thing was that the script appeared to keep firing even after I left my contactUs page. My if statements kept it from misbehaving but perhaps it's something others will need to be wary about.</p> <p>My footer is not fixed position which seems like might have different behavior or response to this but perhaps this will help you as well.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload