2010-11-22 74 views
13

Tôi đang tìm cách xóa toàn bộ nội dung của trang web bằng Javascript thuần túy - không có thư viện nào.Xóa tất cả nội dung bằng JS thuần túy

tôi đã cố gắng:

document.documentElement.innerHTML = "whatever"; 

nhưng điều đó không làm việc: nó thay thế bên trong của phần tử <html/>. Tôi đang xem xét thay thế toàn bộ tài liệu, bao gồm cả nếu có thể tuyên bố doctype<?xml.

+10

'location = 'about: blank'' –

+0

Kết thúc là gì? Javascript hoạt động trên DOM là cấp cao hơn so với tuần tự hóa HTML cơ bản (nghĩa là nơi '

+0

@Yi Jiang Công trình này, nhưng tôi thực sự muốn ở trên cùng một miền ... –

Trả lời

22

Tôi nghĩ rằng một trình duyệt chính đáng giả trang có nội dung kiểu text/html sẽ luôn luôn là một trang web - vì vậy khi bạn có thể làm điều gì đó giống như ...

document.body.innerHTML = ''; 

Nó vẫn sẽ có một số HTML treo xung quanh.

Bạn có thể thử ...

document.documentElement.innerHTML = ''; 

... mà để lại cho tôi với <html></html>.

Yi Jiang đã đề xuất điều gì đó thông minh.

window.location = 'about:blank'; 

Điều này sẽ đưa bạn đến trang trống - một cơ chế nội bộ được cung cấp bởi hầu hết các trình duyệt mà tôi tin.

Tôi nghĩ tuy nhiên giải pháp tốt nhất là sử dụng document.open() sẽ xóa màn hình.

+0

Câu trả lời được cập nhật đầu tiên là một nửa số mà tôi đang tìm kiếm. Nhưng tôi đoán việc thay đổi 'doctype' đang hỏi quá nhiều ... –

+1

@passcod Khi bạn thay đổi kiểu tài liệu, bạn đang thay đổi cách trình duyệt sẽ hiển thị HTML/CSS của bạn. Điều này sẽ * có thể * đòi hỏi phải tải lại trang. Tôi không nghĩ rằng bạn có thể thay đổi một loại tài liệu trên bay. – alex

+1

@alex thay đổi ** window.location ** thành ** 'about: blank' ** có sự cố với IE đặc biệt IE10 vì một số addons khi phát hiện ** about: blank ** page điền vào nội dung của chúng – iman

0

Tôi tin rằng điều này sẽ làm điều đó

document.clear() //deprecated 

window.location = "about:blank" //this clears out everything 
+0

Điều đó không hiệu quả đối với tôi, nhưng tôi đã thử nó trên jsbin.com, điều này có thể làm điều gì đó khác đằng sau hậu trường. – alex

+0

@alex ..yeah Tôi vừa nhận ra document.clear() đã không được chấp nhận. –

+0

@John Hartsock thay đổi ** window.location ** thành ** 'about: blank' ** có sự cố với IE10 đặc biệt vì một số addons khi phát hiện ** about: blank ** page điền vào nội dung của chúng – iman

0

Im chỉ tò mò là tại sao bạn muốn làm điều đó. Bây giờ không có cách nào mà tôi biết để thay thế hoàn toàn mọi thứ xuống tờ khai doctype nhưng nếu bạn muốn đi đến những độ dài đó, tại sao không chuyển hướng người dùng đến trang được tạo đặc biệt có mẫu bạn cần với loại tài liệu bạn cần và điền vào nội dung ở đó?

EDIT: để trả lời nhận xét, những gì bạn có thể làm là loại bỏ tất cả nội dung, sau đó tạo iframe làm cho nó lấp đầy toàn bộ trang và sau đó bạn có toàn quyền kiểm soát nội dung. Hãy lưu ý rằng đây là một hack lớn và có thể sẽ rất đau đớn - nhưng nó sẽ làm việc :)

+0

Cho tất cả những người hỏi lý do ... Điều này có vẻ như một cách dễ dàng để loại bỏ tất cả mọi thứ ra và bắt đầu từ đầu trong một usercript ... Tôi có thể bao gồm bất cứ mã JS tôi muốn, và nó sẽ chạy trong trang, không phải trong một sandbox. Điều 'doctype' là khi tôi muốn sử dụng xhtml trên một trang web html. –

+1

Trên thực tế, giải pháp của Steve rất tuyệt ... chỉ cần tinh chỉnh một số nội dung để bao gồm 'doctype' ... –

+0

yep âm thanh của anh ấy tốt nếu bạn không cần hỗ trợ IE –

3
var i = document.childNodes.length - 1; 

while (i >= 0) { 
    console.log(document.childNodes[i]); 
    document.removeChild(document.childNodes[i--]); 
} 

Xóa mọi thứ (doctype) trên FF 3.6, Chrome 3.195 và Safari 4.0. IE8 phá vỡ kể từ khi đứa trẻ muốn loại bỏ cha mẹ của nó.


xem xét lại một thời gian sau đó, cũng có thể được thực hiện như thế này:

while (document.firstChild) { 
    document.removeChild(document.firstChild); 
} 
+0

Có vẻ tốt và làm việc cho tôi quá. – alex

+0

Tuyệt vời, nhưng bạn vẫn không thể thay đổi loại tài liệu ... không quan trọng lắm. Firefox đã gặp sự cố khi tôi thử ... –

+1

Câu hỏi của bạn là "Cách thay đổi loại tài liệu" hoặc "Xóa tất cả nội dung bằng JS thuần túy"? – Ben

1

Sau khi trang đã được nạp đầy đủ:

document.write(''); 
document.close(); 
+0

Không, không hoạt động. –

+0

@passcod - kiểm tra của bạn là sai. Điều này hoạt động tốt. – Alohci

+1

Bạn chỉ có thể sử dụng 'document.open()'. – alex

2

Theo Dotoro's article on the document.clear method, họ (kể từ khi nó bị phản đối) khuyên bạn nên gọi số document.open để xóa trang vì nó bắt đầu một luồng mới.

Bằng cách này, bạn tránh được sự khó chịu about:blank hack. !

-2

loại bỏ mọi thứ NHƯNG --- DOCTYPE html ---

var l = document.childNodes.length;  
while (l > 1) { var i = document.childNodes[1]; document.removeChild(i); l--; } 

thử nghiệm trên FIREFOX WEB THANH TRA - childNodes [1] IS --- DOCTYPE html ---

0
document.documentElement.innerHTML=''; 
document.open(); 

Phương thức Document.open() mở một tài liệu để viết. nếu bạn không sử dụng phương pháp mở, bạn không thể sửa đổi tài liệu sau khi thiết lập innerHTML để chuỗi rỗng

+1

Bạn nên giải thích lý do tại sao tính năng này hoạt động. – ryanpcmcquen

0

Tôi tin rằng điều này vẫn sẽ rời khỏi nút DOCTYPE treo xung quanh, nhưng:

document.documentElement.remove()

hoặc tương đương

document.getElementsByTagName("html")[0].remove()

Các vấn đề liên quan