Mam 2 pliki HTML, przypuszczam a.html
i b.html
. W a.html
Chcę uwzględnić b.html
.
W JSF mogę to zrobić w następujący sposób:
<ui:include src="b.xhtml" />
Oznacza to, że wewnątrz a.xhtml
pliku mogę dołączyć b.xhtml
.
Jak możemy to zrobić w *.html
pliku?
javascript
html
include
Lolo
źródło
źródło
localhost
: stackoverflow.com/questions/7542872/…Odpowiedzi:
Moim zdaniem najlepsze rozwiązanie wykorzystuje jQuery:
a.html
:b.html
:Ta metoda jest prostym i czystym rozwiązaniem mojego problemu.
Dokumentacja jQuery
.load()
jest tutaj .źródło
$(function(){})
uruchomi się dopiero po zakończeniu ładowania dokumentu.XMLHttpRequest cannot load file:///.../b.html. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.
Rozszerzając odpowiedź Lolo z góry, oto nieco więcej automatyzacji, jeśli musisz dołączyć wiele plików:
A potem dołączyć coś do html:
Który obejmowałby plik views / header.html i views / footer.html
źródło
data-argument
Pobranie go z dołączonego pliku?$("#postdiv").load('posts.php?name=Test&age=25');
class="include"
- po prostu wybierz selektor jQueryvar includes = $('[data-include]');
Moje rozwiązanie jest podobne do powyższego Lolo . Jednak wstawiam kod HTML za pomocą document.write JavaScript zamiast używać jQuery:
a.html:
b.js:
Powodem, dla którego nie używam jQuery, jest to, że plik jQuery.js ma rozmiar ~ 90 KB i chcę, aby ilość danych do załadowania była jak najmniejsza.
Aby uzyskać poprawnie zamknięty kod JavaScript bez większego nakładu pracy, możesz użyć następującego polecenia sed:
Lub po prostu użyj następującego przydatnego skryptu bash opublikowanego jako Gist na Github, który automatyzuje wszystkie niezbędne prace, konwertując
b.html
nab.js
: https://gist.github.com/Tafkadasoh/334881e18cbb7fc2a5c033bfa03f6ee6Podziękowania dla Grega Minshalla za ulepszoną komendę sed, która także unika ukośników i pojedynczych cudzysłowów, czego moje oryginalne polecenie sed nie brało pod uwagę.
Alternatywnie dla przeglądarek obsługujących literały szablonów działa również:
b.js:
źródło
'
znaków w nim. Jeśli po prostu zrobić Znajdź / Zamień, aby zastąpić` with
\ `następnie znaleźć / zastąpić zastąpić'
z\'
oraz nowych linii z` `nowych linii będzie działać dobrze.`
${var}
\`
\$
Kasa importuje HTML5 poprzez samouczek Html5rocks oraz w projekcie polimerowym
Na przykład:
źródło
stuff.html
dostępny jako szablon obrębie strony nadrzędnej, ale trzeba by użyć skryptów do tworzenia klonów jego DOM na stronie macierzystej tak, że są one widoczne dla użytkownika.TypeError: ... .import is undefined
. MDN mówi: „Ta funkcja nie jest obecnie zaimplementowana w żadnej przeglądarce natywnie”. Czy ktoś wie, czy można zbudować FF za pomocą tej funkcji?Bezwstydna wtyczka biblioteki, którą napisałem, rozwiązuje ten problem.
https://github.com/LexmarkWeb/csi.js
Powyższe weźmie zawartość
/path/to/include.html
i zastąpidiv
ją.źródło
<div data-include="/path/to/include.html"></div>
. To narzędzie ułatwia w prosty sposób wykonanie prostej makiety wielostronicowej bez wtyczek.Prosta po stronie serwera dyrektywa zawiera inny plik znaleziony w tym samym folderze wygląda następująco:
źródło
<!--#include file="a.html" -->
, jak równieżNie potrzeba skryptów. Nie musisz robić żadnych wymyślnych rzeczy po stronie serwera (prawdopodobnie byłaby to lepsza opcja)
Ponieważ stare przeglądarki nie obsługują płynnie, należy dodać trochę css, aby to naprawić:
Należy pamiętać, że w przypadku przeglądarek, które nie obsługują płynnego działania, kliknięcie łącza w ramce iframe spowoduje przejście ramki do tego adresu URL, a nie do całego okna. Sposobem na obejście tego jest posiadanie wszystkich linków
target="_parent"
, ponieważ obsługa przeglądarki jest „wystarczająco dobra”.źródło
seamless
Atrybut został usunięty z projektu HTML pochodzi. Nie używaj tego.Bardzo stare rozwiązanie I nie spełnił moje potrzeby, a następnie z powrotem, ale oto jak to zrobić zgodny ze standardami kodu:
źródło
<object>
,<embed>
a<iframe>
wszystkie prace w tym, ale we wszystkich trzech przypadkach tworzą oddzielne dokumenty z własnych stylizacji i skryptów kontekstów (iframe szczególnie zawiera brzydkie granic i przewijania), aw przypadku jakichkolwiek powiązań domyślnie otwartych w nich, a nie na strona nadrzędna (chociaż można to zastąpić za pomocą target = "_ rodzic"). Ze wszystkich tych elementów iframe jest jedyną, która ma nadzieję na lepszą integrację poprzezseamless
atrybut HTML5 (wspomniany przez bjb568), ale nie jest jeszcze dobrze obsługiwana: caniuse.com/#feat=iframe-seamlessseamless
atrybucie) jest jedyną nieaktualną częścią - reszta nadal obowiązuje.Alternatywnie, jeśli masz dostęp do pliku .htaccess na swoim serwerze, możesz dodać prostą dyrektywę, która pozwoli na interpretację php na plikach z rozszerzeniem .html.
Teraz możesz użyć prostego skryptu php, aby dołączyć inne pliki, takie jak:
źródło
.htaccess
może spowodować, żehtml
strony będą próbowały pobierać jako pliki zamiast wyświetlać je w przeglądarce. Najpierw przetestuj. Oświadczenie: To właśnie mi się przydarzyło, kiedy wypróbowałem powyższe rozwiązanie. Mój.htaccess
był pusty, z wyjątkiem dwóch linii. Zalecana ostrożność.lolo
Zamiast tego wypróbuj rozwiązanie jQuery (poniżej).Poniższe działa, jeśli należy dołączyć zawartość HTML z jakiegoś pliku: Na przykład następujący wiersz będzie zawierał zawartość fragmentu_do_włączenia.html w miejscu, w którym występuje definicja OBIEKTU.
Odniesienie: http://www.w3.org/TR/WD-html40-970708/struct/includes.html#h-7.7.4
źródło
Oto moje rozwiązanie na miejscu:
źródło
W w3.js obejmują takie prace:
Aby uzyskać odpowiedni opis, spójrz na to: https://www.w3schools.com/howto/howto_html_include.asp
źródło
To mi pomogło. Aby dodać blok kodu HTML od
b.html
doa.html
, powinien on przejść dohead
tagua.html
:Następnie w znaczniku body tworzony jest kontener z unikalnym identyfikatorem i blokiem javascript, aby załadować go
b.html
do kontenera w następujący sposób:źródło
Wiem, że to bardzo stary post, więc niektóre metody nie były wówczas dostępne. Ale oto moje bardzo proste podejście (na podstawie odpowiedzi Lolo).
Opiera się na atrybutach data-* HTML5 i dlatego jest bardzo ogólny, ponieważ używa funkcji for-each jQuery, aby uzyskać każdą .class pasującą „load-html” i używa swojego odpowiedniego atrybutu „data-source” do załadowania treści:
źródło
Możesz użyć wielopełniacza importów HTML ( https://www.html5rocks.com/en/tutorials/webcomponents/imports/ ) lub tego uproszczonego rozwiązania https://github.com/dsheiko/html-import
Na przykład na stronie importujesz taki blok HTML:
Blok może mieć własny import:
Importer zastępuje dyrektywę załadowanym kodem HTML, podobnie jak SSI
Te dyrektywy zostaną wyświetlone automatycznie, gdy tylko załadujesz ten mały skrypt JavaScript:
Przetworzy import, gdy DOM będzie gotowy automatycznie. Poza tym udostępnia interfejs API, którego można używać do ręcznego uruchamiania, uzyskiwania dzienników i tak dalej. Cieszyć się :)
źródło
script async src
Wydaje się, że „kluczem do tego jest” . Wypróbować to!Większość rozwiązań działa, ale mają one problem z jquery :
Problem dotyczy następującego kodu
$(document).ready(function () { alert($("#includedContent").text()); }
nie ostrzega, zamiast ostrzegać o zawartej treści.Piszę poniższy kod, w moim rozwiązaniu możesz uzyskać dostęp do zawartej treści
$(document).ready
funkcji:(Klucz ładuje dołączoną zawartość synchronicznie).
index.htm :
include.inc :
jquery zawiera wtyczkę na github
źródło
Aby wstawić zawartość nazwanego pliku:
źródło
Odpowiedź Athari (pierwsza!) Była zbyt rozstrzygająca! Bardzo dobre!
Ale jeśli chcesz przekazać nazwę strony, która ma zostać uwzględniona jako parametr adresu URL , ten post ma bardzo fajne rozwiązanie do zastosowania w połączeniu z:
http://www.jquerybyexample.net/2012/06/get-url-parameters-using-jquery.html
Staje się więc coś takiego:
Twój adres URL:
A.html kod staje się teraz:
To działało dla mnie bardzo dobrze! Mam nadzieję, że pomogłem :)
źródło
html5rocks.com ma bardzo dobry tutorial na ten temat i może to być trochę za późno, ale ja sam nie wiedziałem, że to istnieje. w3schools ma również na to sposób, używając swojej nowej biblioteki o nazwie w3.js. Chodzi o to, że wymaga to użycia serwera WWW i obiektu HTTPRequest. Nie można załadować ich lokalnie i przetestować na swoim komputerze. Możesz jednak użyć wypełnień podanych w linku html5rocks u góry lub postępować zgodnie z ich samouczkiem. Przy odrobinie magii JS możesz zrobić coś takiego:
Spowoduje to utworzenie linku (Może zmienić się w pożądany element linku, jeśli jest już ustawiony), ustawienie importu (chyba że już go masz), a następnie dołączenie. Następnie stamtąd to weźmie i parsuje plik w HTML, a następnie doda go do żądanego elementu pod div. Można to wszystko zmienić, dopasowując do potrzeb - od elementu dołączającego do łącza, którego używasz. Mam nadzieję, że to pomogło, może teraz nie mieć znaczenia, jeśli pojawią się nowsze, szybsze sposoby bez użycia bibliotek i frameworków takich jak jQuery lub W3.js.
AKTUALIZACJA: Zgłasza błąd informujący, że lokalny import został zablokowany przez zasady CORS. Może potrzebować dostępu do głębokiej sieci, aby móc z niej korzystać ze względu na jej właściwości. (Oznacza brak praktycznego zastosowania)
źródło
Oto moje podejście przy użyciu Fetch API i funkcji asynchronicznej
źródło
Na razie nie ma bezpośredniego rozwiązania HTML dla tego zadania. Nawet import HTML (który jest na stałe w wersji roboczej ) nie zrobi tego, ponieważ Import! = Include i i tak będzie wymagana magia JS.
Niedawno napisałem do VanillaJS skrypt , który jest właśnie dla integracji HTML do HTML, bez żadnych komplikacji.
Po prostu umieść w swoim
a.html
To jest
open-source
i może dać pomysł (mam nadzieję)źródło
Możesz to zrobić za pomocą biblioteki jQuery JavaScript:
HTML:
JS:
Należy pamiętać, że
banner.html
powinien znajdować się w tej samej domenie, w której znajdują się inne strony, w przeciwnym razie strony odrzucąbanner.html
plik z powodu zasad udostępniania zasobów między źródłami .Pamiętaj też, że jeśli załadujesz treść za pomocą JavaScript, Google nie będzie w stanie zaindeksować jej, więc nie jest to dobra metoda ze względu na SEO.
źródło
Czy próbowałeś wstrzyknięcia iFrame?
Wstrzykuje ramkę iFrame do dokumentu i usuwa się (tak powinno być w HTML DOM)
<iframe src="header.html" onload="this.before((this.contentDocument.body||this.contentDocument).children[0]);this.remove()"></iframe>
pozdrowienia
źródło
Przyszedłem do tego tematu, szukając czegoś podobnego, ale nieco innego niż problem, który stwarza Lolo. Chciałem zbudować stronę HTML z menu alfabetycznym zawierającym łącza do innych stron, a każda z tych stron mogłaby istnieć lub nie, a kolejność, w jakiej zostały utworzone, może nie być alfabetyczna (ani nawet numeryczna). Podobnie jak Tafkadasoh, nie chciałem nadmuchać strony internetowej za pomocą jQuery. Po zbadaniu problemu i eksperymentowaniu przez kilka godzin, oto, co zadziałało dla mnie, z odpowiednimi uwagami:
źródło
Oto świetny artykuł. Możesz wdrożyć wspólną bibliotekę i po prostu użyć poniższego kodu, aby zaimportować dowolne pliki HTML w jednym wierszu.
Możesz także wypróbować Google Polymer
źródło
Korzystanie z backticks ES6 ``: literały szablonu !
W ten sposób możemy dołączyć html bez kodowania cudzysłowów, dołączyć zmienne z DOM i tak dalej.
Jest to potężny silnik szablonów, możemy użyć osobnych plików js i użyć zdarzeń do załadowania zawartości w miejscu, a nawet oddzielić wszystko w kawałki i wywoływać na żądanie:
https://caniuse.com/#feat=template-literals
źródło
javascript
Do tej pory w dużym stopniu zmiażdżyłem tę odznakę jako programista hobby.Aby rozwiązanie działało, musisz dołączyć plik csi.min.js, który możesz znaleźć tutaj .
Zgodnie z przykładem pokazanym na GitHub, aby użyć tej biblioteki, musisz dołączyć plik csi.js do nagłówka strony, a następnie musisz dodać atrybut data-include z jego wartością ustawioną do pliku, który chcesz dołączyć, do kontenera element.
Ukryj kod kopiowania
... mam nadzieję, że to pomoże.
źródło
PHP jest językiem skryptowym na poziomie serwera. Może robić wiele rzeczy, ale jednym z popularnych zastosowań jest umieszczanie dokumentów HTML na twoich stronach, podobnie jak SSI. Podobnie jak SSI, jest to technologia na poziomie serwera. Jeśli nie masz pewności, czy na swojej stronie działa funkcja PHP, skontaktuj się z dostawcą hostingu.
Oto prosty skrypt PHP, którego można użyć do włączenia fragmentu kodu HTML na dowolnej stronie internetowej z obsługą PHP:
Zapisz kod HTML wspólnych elementów witryny, aby oddzielić pliki. Na przykład sekcja nawigacji może być zapisana jako navigation.html lub navigation.php. Użyj następującego kodu PHP, aby dołączyć ten HTML na każdej stronie.
Użyj tego samego kodu na każdej stronie, na której chcesz dołączyć plik. Zmień nazwę podświetlonego pliku na nazwę i ścieżkę do pliku dołączanego.
źródło
Jeśli używasz frameworka, takiego jak django / bootle, często dostarczają silnik szablonów. Załóżmy, że używasz butelki, a domyślnym silnikiem szablonów jest silnik SimpleTemplate . A poniżej znajduje się czysty plik HTML
Możesz dołączyć footer.tpl do swojego głównego pliku, na przykład:
Poza tym możesz także przekazać parametr do swojego dashborard.tpl.
źródło
Na podstawie odpowiedzi https://stackoverflow.com/a/31837264/4360308 zaimplementowałem tę funkcjonalność z Nodejs (+ express + cheerio) w następujący sposób:
HTML (index.html)
JS
append -> włącza zawartość do div
replace -> zastępuje div
możesz łatwo dodać więcej zachowań według tego samego projektu
źródło