Đã đăng vào thg 6 21, 2019 4:18 SA 0 phút đọc
Điều cực kỳ đáng ngạc nhiên với tôi là HTML chưa bao giờ có cách nào để include các tệp HTML khác. Một ví dụ kinh điển: include phần header & footer vào trong trang.
...
Your content here
...
Nhân tiện, đoạn code trên chỉ là giả tưởng. Tôi ước một ngày nó trở thành hiện thực. Vậy thì để giải quyết bài toán include HTML thì sẽ có các cách sau:
Sử dụng PHP
...
Your content here
...
Sử dụng Gulp
...
@@include['./header.html']
Content
@@include['./footer.html']
...
Gulp có rất nhiều processors có thể xử lý việc này. Một trong số đó là
gulp-file-include.
// Javascript
var fileinclude = require['gulp-file-include'],
gulp = require['gulp'];
gulp.task['fileinclude', function[] {
gulp.src[['index.html']]
.pipe[fileinclude[{
prefix: '@@',
basepath: '@file'
}]]
.pipe[gulp.dest['./']];
}];
Sử dụng Grunt
Plugin grunt-bake sẽ giúp bạn xử lý việc include HTML
Javascript
grunt.initConfig[{
bake: {
your_target: {
files: {
"dist/index.html": "app/index.html",
}
}
}
}];
HTML
...
Content
...
Sử dụng Pug
//pugjs.org/
...
body
include ./header.html"
p Content
include ./footer.html"
...
All rights reserved
answer
613
Theo tôi, giải pháp tốt nhất sử dụng jQuery:
a.html
:
$[function[]{
$["#includedContent"].load["b.html"];
}];
b.html
:
This is my include file
Phương pháp này là một giải pháp đơn giản và sạch sẽ cho
vấn đề của tôi.
.load[]
Tài liệu jQuery ở đây .
613 hữu ích 5 bình luận chia sẻ
answer
131
Giải pháp của tôi tương tự như một trong những
lolo ở trên. Tuy nhiên, tôi chèn mã HTML qua document.write của JavaScript thay vì sử dụng jQuery:
a.html:
Put your HTML content before insertion of b.js.
...
...
And whatever content you want afterwards.
b.js:
document.write['\
\
Add your HTML code here
\
\
Notice however, that you have to escape LF'
s with a '\', just like\
demonstrated in this code listing.\
\
\
'];
Lý do khiến tôi không sử dụng jQuery là jQuery.js có kích thước ~ 90kb và tôi
muốn giữ lượng dữ liệu để tải càng nhỏ càng tốt.
Để có được tệp JavaScript thoát đúng mà không cần nhiều công việc, bạn có thể sử dụng lệnh sed sau:
sed 's/\\/\\\\/g;s/^.*$/&\\/g;s/'\''/\\'\''/g' b.html > escapedB.html
Hoặc chỉ sử dụng tập lệnh bash tiện dụng sau được xuất bản dưới dạng Gist trên Github, tự động hóa tất cả các công việc cần thiết, chuyển đổi b.html
thành b.js
:
//gist.github.com/Tafkadasoh/334881e18cbb7fc2a5c033bfa03f6ee6
Tín dụng cho Greg Minshall cho lệnh sed cải tiến cũng thoát khỏi dấu gạch chéo và dấu
ngoặc đơn, điều mà lệnh sed ban đầu của tôi không xem xét.
131 hữu ích 5 bình luận chia sẻ
answer
124
Mở rộng câu trả lời của lolo từ trên xuống, đây là một chút tự động hóa hơn nếu bạn phải bao gồm rất nhiều tệp:
$[function[]{
var includes = $['[data-include]'];
jQuery.each[includes, function[]{
var file = 'views/' + $[this].data['include'] + '.html';
$[this].load[file];
}];
}];
Và sau đó để bao gồm một cái gì đó trong html:
Mà
sẽ bao gồm các lượt xem tệp / header.html và lượt xem / footer.html
124 hữu ích 5 bình luận chia
sẻ
answer
80
Kiểm tra nhập HTML5 thông qua hướng dẫn Html5rocks và tại
dự án polymer
Ví dụ:
80 hữu ích
5 bình luận chia sẻ
answer
57
Ổ cắm không biết xấu hổ của một thư viện mà tôi đã viết giải quyết
này.
//github.com/LexmarkWeb/csi.js
Ở trên sẽ lấy nội dung /path/to/include.html
và thay thế div
bằng nó.
57 hữu ích 5 bình luận chia sẻ
answer
44
Một phía máy chủ đơn giản bao gồm chỉ thị để bao gồm một tệp khác được tìm thấy trong cùng thư mục trông như thế này:
44 hữu ích 4 bình luận chia sẻ
answer
33
Một giải pháp rất cũ tôi đã đáp ứng nhu cầu của tôi hồi đó,
nhưng đây là cách thực hiện mã tuân thủ tiêu chuẩn:
backup content
33 hữu ích 3 bình luận chia sẻ
answer
29
Không cần kịch bản. Không cần phải làm bất kỳ công cụ ưa thích nào phía máy chủ [tho có lẽ sẽ là một lựa chọn tốt hơn]
Vì các trình duyệt cũ không hỗ trợ liền mạch, bạn nên thêm
một số css để sửa lỗi:
iframe[seamless] {
border: none;
}
Hãy nhớ rằng đối với các trình duyệt không hỗ trợ liền mạch, nếu bạn nhấp vào một liên kết trong iframe, nó sẽ làm cho khung đi đến url đó, chứ không phải toàn bộ cửa sổ. Một cách để khắc phục điều đó là có tất cả các liên kết target="_parent"
, tho hỗ trợ trình duyệt là "đủ tốt".
29 hữu ích 5 bình luận chia sẻ
answer
16
Cách khác, nếu bạn có quyền truy cập vào tệp .htaccess trên máy chủ của mình, bạn có thể thêm một lệnh đơn giản cho phép php được diễn giải trên các tệp kết thúc bằng phần mở rộng .html.
RemoveHandler .html
AddType application/x-httpd-php .php .html
Bây giờ
bạn có thể sử dụng tập lệnh php đơn giản để bao gồm các tệp khác, chẳng hạn như:
16 hữu ích 5 bình luận
chia sẻ
answer
13
Các công việc sau đây nếu nội dung html từ một số tệp cần được đưa vào: Chẳng hạn, dòng sau sẽ bao gồm nội dung của mảnh_to_include.html tại vị trí xảy ra định nghĩa ĐỐI
TƯỢNG.
...text before...
Warning: file_to_include.html could not be included.
...text after...
Tham khảo: //www.w3.org/TR/WD-html40-970708/struct/includes.html#h-7.7.4
13 hữu ích 3 bình luận chia sẻ
answer
8
Đây là những gì đã giúp tôi. Để thêm một khối mã html từ b.html
đến a.html
, điều này sẽ đi vào head
thẻ của
a.html
:
Sau đó, trong thẻ body, một container được tạo với một id duy nhất và một khối javascript để tải b.html
vào container, như sau:
$[function[]{
$["#b-placeholder"].load["b.html"];
}];
8 hữu ích 2 bình luận chia sẻ
answer
8
Bạn có thể sử dụng một polyfill của Nhập khẩu HTML [
//www.html5rocks.com/en/tutorials/webcomponents/imports/ ] hoặc giải pháp đơn giản đó //github.com/dsheiko/html-import
Ví dụ: trên trang bạn nhập khối HTML như
thế:
Các khối có thể có nhập khẩu của riêng mình:
Nhà nhập khẩu thay thế chỉ thị bằng HTML được tải khá giống như SSI
Các chỉ thị này sẽ được cung cấp tự động ngay khi bạn tải JavaScript nhỏ này:
Nó sẽ xử lý việc nhập khi DOM sẵn sàng tự động. Ngoài ra, nó hiển thị một API mà bạn có thể sử dụng để chạy thủ công, để nhận nhật ký, v.v.
Thưởng thức :]
8 hữu ích 2 bình luận chia sẻ
answer
7
Tôi biết đây là một bài viết rất cũ, vì vậy một số phương pháp không có sẵn trước đó. Nhưng đây là cách làm rất đơn giản của tôi [dựa trên câu trả lời của Lolo].
Nó dựa vào các thuộc tính dữ
liệu HTML5 * và do đó rất chung chung là sử dụng hàm for-every của jQuery để lấy mọi "lớp-html" khớp với nhau và sử dụng thuộc tính 'nguồn dữ liệu' tương ứng của nó để tải nội dung:
$[function [] {
$[".load-html"].each[function [] {
$[this].load[this.dataset.source];
}];
}];
7 hữu ích
0 bình luận chia sẻ
answer
6
Để chèn nội dung của tệp được đặt tên:
6 hữu ích 1 bình luận chia sẻ
answer
6
Trong w3.js bao gồm các tác phẩm như thế này:
w3.includeHTML[];
Để biết mô tả thích hợp, hãy xem phần này:
//www.w3schools.com/howto/howto_html_include.asp
6 hữu ích 2 bình luận chia sẻ
answer
5
Câu trả lời của Athari [lần đầu tiên!] Là quá nhiều kết luận!
Rất tốt!
Nhưng nếu bạn muốn chuyển tên của trang để được đưa vào làm tham số URL , bài đăng này có một giải pháp rất hay được sử dụng kết hợp với:
//www.jquerybyexample.net/2012/06/get-url-parameter-USE-jquery.html
Vì vậy, nó trở thành một cái gì đó như thế này:
URL của bạn:
www.yoursite.com/a.html?p=b.html
Các a.html mã bây giờ trở thành:
function GetURLParameter[sParam]
{
var sPageURL = window.location.search.substring[1];
var sURLVariables = sPageURL.split['&'];
for [var i = 0; i