2012-03-08 21 views
10

Próbuję zaimplementować kod, który utworzy nagłówki i stopki na wszystkich moich stronach internetowych zamiast ich twardego kodowania. Próbowałem tego:jQuery Mobile: Użyj tej samej stopki nagłówka dla wszystkich stron

Miałem to na mojej "głównej stronie", którą właśnie nazwałem, zawinąłem nagłówek, który chciałem w div.

<div id="headerProto"> 
    <div data-role="header" data-position="fixed" data-theme="b"> 
     <h1> Title </h1>   
    </div> 
</div> 

Następnie w innych stronach miałem:

<div class="headerChild"> 
</div> 

I dodałem:

$(".headerChild").html($("#headerProto").html()); 

nie ma kości. Tak czy inaczej to było całkowite odgadnięcie, jak mam to zrobić. Czy istnieje lepszy sposób?

+2

Czy jesteś w stanie korzystać z dynamicznego języka po stronie serwera, takich jak PHP do generowania tych stron? To byłby najlepszy sposób. – Brandan

+0

http://stackoverflow.com/questions/9152446/creating-templated-persistant-header-footer-template-in-jquery-mobile-and-phoneg/9204896#9204896 – bmurmistro

Odpowiedz

9

Korzystanie z .load() może pomóc, a następnie po prostu wpisz kod, który chcesz dołączyć do pliku, do którego linkujesz.

$('.headerChild').load('pathto/headerProto.html') 

Alternatywnym sposobem, jeśli nie chcesz zachować dane w osobnym pliku: Nie zrobiłem tego, ale z jakiegoś szybkiego badania można również odwołuje się do elementu w pliku.

$('.headerChild').load('pathto/mainPage.html #headerProto') 
+0

perfect. Dzięki! – JoshDG

4

Kredyt trafia do mariachi.

http://forum.jquery.com/topic/jquery-mobile-fixed-header-and-footer-on-page-transition

jestem po prostu wklejając jego rozwiązanie.

1.) Zawiń swoją rolę danych = "nagłówek" i wstaw id = "constantheader-wrapper".


Komórka Sidor

Użyj div jeśli chcesz w opakowaniu nagłówka, ale staram się mieć pełną świadczonych wyjście nagłówka jak w tym przypadku, inaczej będzie to luźne stylizacji podczas przeładowania Strona. UWAGA! Umieść nagłówek na pierwszej stronie, a następnie tę metodę dodaj nagłówek html do wszystkich innych stron.

2.) Put funkcji w skrypcie pliku lub inline:

jQuery.fn.headerOnAllPages = function() { 
    var theHeader = $('#constantheader-wrapper').html(); 
    var allPages = $('div[data-role="page"]'); 

    for (var i = 1; i < allPages.length; i++) { 
     allPages[i].innerHTML = theHeader + allPages[i].innerHTML; 
    } 
}; 

3.) Wywołanie funkcji z dokumentu gotowego, na przykład:

$(document).ready(function() { 
    $().headerOnAllPages(); 
}); 
+0

za 1) nie może tu jasne jak mariachi napisał próbkę '

...

4

używam.clone()

W moim wielostronicowego projektu jQuery Mobile I mieć nagłówek na mojej stronie głównej:

<div data-role="header" data-id="header" class="ui-header ui-bar-b" role="banner" id="headerMaster"> 
    <a href="#my-menu">Menu</a> 
    <h1 class="ui-title" role="heading" aria-level="1">My Header</h1> 
</div> 

i we wszystkich kolejnych stronach (lub DIV z danymi-role = stronie) mam to:

<div class="headerChild"> 
</div> 

a następnie na pageinit można sklonować mistrza i dołączyć do wszystkich dzieci:

$(document).delegate("#index", "pageinit", function() { 
     $("#headerMaster").clone().appendTo(".headerChild"); 
}); 

ED IT: jeśli pageinit nie działa dla Ciebie, spróbuj pagebeforecreate zdarzenie

$(document).delegate("#index", "pagebeforecreate", function() { 
    $("#headerMaster").clone().appendTo(".headerChild"); 
}); 
+0

' To działa na mnie, choć miałem go umieścić w (document) .ready zamiast delegata. –

+0

@MarcelMarino patrząc na moje ponowne repozytorium kodu wygląda na to, że zmieniłem stronę z wydarzenia na stronę na event pagebeforecreate, więc być może miałem też problem z pageinit - nie pamiętam, że to było zbyt dawno temu :) Dodam edytuj odpowiedź –

Powiązane problemy