Cách nối chuỗi HTML này
var str = '<p>Just some <span>text</span> here</p>';
đến DIV với ID 'test'
có trong DOM?
(Btw div.innerHTML += str;
không được chấp nhận.)
Cách nối chuỗi HTML này
var str = '<p>Just some <span>text</span> here</p>';
đến DIV với ID 'test'
có trong DOM?
(Btw div.innerHTML += str;
không được chấp nhận.)
Câu trả lời:
Sử dụng insertAdjacentHTML
nếu nó có sẵn, nếu không sử dụng một số loại dự phòng. insertAdjighborHTML được hỗ trợ trong tất cả các trình duyệt hiện tại .
div.insertAdjacentHTML( 'beforeend', str );
Bản demo trực tiếp: http://jsfiddle.net/euQ5n/
insertAdjacentHTML
nhanh hơn so với việc thêm vào innerHTML
, bởi vì insertAdjacentHTML
không tuần tự hóa và lặp lại các phần tử con hiện có của phần tử.
insertAdjacentHTML
duy trì các giá trị của các phần tử biểu mẫu đã thay đổi, trong khi bổ sung để innerHTML
xây dựng lại phần tử và mất tất cả bối cảnh biểu mẫu.
điều này có chấp nhận được không?
var child = document.createElement('div');
child.innerHTML = str;
child = child.firstChild;
document.getElementById('test').appendChild(child);
jsFiddle .
Nhưng , câu trả lời của Neil là một giải pháp tốt hơn.
innerHTML
?
insertAdjacentHTML
.
AppendChild
(E) nhanh hơn gấp 2 lần so với các giải pháp khác trên chrome và safari, insertAdjacentHTML
(F) nhanh nhất trên firefox. Các innerHTML=
(B) (Đừng nhầm lẫn với +=
(A)) là giải pháp nhanh thứ hai trên tất cả các trình duyệt và nó là nhiều hơn nữa tiện dụng hơn so với E và F.
Thiết lập môi trường (2019.07.10) MacOs High Sierra 10.13.4 trên Chrome 75.0.3770 (64-bit), Safari 11.1.0 (13604.5.6), Firefox 67.0.0 (64-bit)
Bạn có thể phát lại bài kiểm tra trong máy của bạn ở đây
Ý tưởng là sử dụng innerHTML
trên một phần tử trung gian và sau đó di chuyển tất cả các nút con của nó đến nơi bạn thực sự muốn chúng đi qua appendChild
.
var target = document.getElementById('test');
var str = '<p>Just some <span>text</span> here</p>';
var temp = document.createElement('div');
temp.innerHTML = str;
while (temp.firstChild) {
target.appendChild(temp.firstChild);
}
Điều này tránh xóa sạch mọi trình xử lý sự kiện trên div#test
nhưng vẫn cho phép bạn nối thêm một chuỗi HTML.
Cách đúng là sử dụng insertAdjacentHTML
. Trong Firefox sớm hơn 8, bạn có thể quay lại sử dụng Range.createContextualFragment
nếu str
không chứa script
thẻ.
Nếu thẻ str
chứa của bạn script
, bạn cần xóa script
các phần tử khỏi đoạn được trả về createContextualFragment
trước khi chèn đoạn. Nếu không, các kịch bản sẽ chạy. ( insertAdjacentHTML
đánh dấu các tập lệnh không thể thực hiện được.)
createContextualFragment
. Tôi đã tìm kiếm một cách để làm cho một số html bao gồm các tập lệnh chỉ chạy nếu người dùng đồng ý đặt cookie.
Hack nhanh :
<script>
document.children[0].innerHTML="<h1>QUICK_HACK</h1>";
</script>
Các trường hợp sử dụng :
1: Lưu dưới dạng tệp .html và chạy trong chrome hoặc firefox hoặc edge. (IE không hoạt động)
2: Sử dụng trong http://js.do
Đang hoạt động: http://js.do/HeavyMetalCookies/quick_hack
Chia nhỏ với ý kiến:
<script>
//: The message "QUICK_HACK"
//: wrapped in a header #1 tag.
var text = "<h1>QUICK_HACK</h1>";
//: It's a quick hack, so I don't
//: care where it goes on the document,
//: just as long as I can see it.
//: Since I am doing this quick hack in
//: an empty file or scratchpad,
//: it should be visible.
var child = document.children[0];
//: Set the html content of your child
//: to the message you want to see on screen.
child.innerHTML = text;
</script>
Lý do tại sao tôi đăng:
JS.do có hai phải có:
Nhưng không hiển thị tin nhắn console.log. Đến đây để tìm kiếm một giải pháp nhanh chóng. Tôi chỉ muốn xem kết quả của một vài dòng mã Scratchpad, các giải pháp khác là quá nhiều công việc.
Tại sao điều đó không được chấp nhận?
document.getElementById('test').innerHTML += str
sẽ là cách làm sách giáo khoa.
#test
mặc dù. Điều đó nói chung là không mong muốn.
Điều này có thể giải quyết
document.getElementById("list-input-email").insertAdjacentHTML('beforeend', '<div class=""><input type="text" name="" value="" class="" /></div>');
InternalHTML xóa tất cả dữ liệu như sự kiện cho các nút hiện có
chắp thêm con với FirstChild chỉ thêm con đầu tiên vào bên trongHTML. Ví dụ: nếu chúng ta phải nối thêm:
<p>text1</p><p>text2</p>
chỉ text1 sẽ hiển thị
Cái này thì sao:
thêm thẻ đặc biệt vào InternalHTML bằng cách nối thêm con và sau đó chỉnh sửa bên ngoàiHTML bằng cách xóa thẻ chúng tôi đã tạo. Không biết nó thông minh như thế nào nhưng nó hoạt động với tôi hoặc bạn có thể thay đổi bên ngoàiHTML sang bên trongHTML để không phải sử dụng chức năng thay thế
function append(element, str)
{
var child = document.createElement('someshittyuniquetag');
child.innerHTML = str;
element.appendChild(child);
child.outerHTML = child.outerHTML.replace(/<\/?someshittyuniquetag>/, '');
// or Even child.outerHTML = child.innerHTML
}
<div id="testit">
This text is inside the div
<button onclick="append(document.getElementById('testit'), '<button>dadasasdas</button>')">To div</button>
<button onclick="append(this, 'some text')">to this</button>
</div>
Ngắn nhất - 18 ký tự (không nhầm lẫn +=
(được đề cập bởi OP) với =
nhiều chi tiết hơn ở đây )
test.innerHTML=str
innerHTML
đặt chuỗi vào phần tử (thay thế tất cả các phần tử con), trong khiinsertAdjacentHTML
đặt nó (1) trước phần tử, (2) sau phần tử, (3) bên trong phần tử trước phần tử con đầu tiên hoặc (4) bên trong các yếu tố sau khi đứa trẻ cuối cùng.