2009-06-27 31 views
9

Có cách nào để tạo hoặc tạo lại một đối tượng tài liệu javascript bằng cách gọi một hàm hay không. Một cái gì đó nhưtạo một tài liệu javascript Object

<script type="javascript/text"> 
    var document = createDocument("some html"); 
</script> 

Tôi muốn làm điều này vì vậy tôi có thể giải quyết vấn đề trong câu hỏi này client side xslt with javascript in firefox

+0

@PaulRoub câu hỏi này và câu trả lời có liên quan là ngày tháng 9 năm 2011, bản sao là câu hỏi khác ngày tháng 11 năm 2011. Sao chép phải dựa trên ngày xuất bản, bản cũ nhất là bản gốc, vui lòng sửa nó. –

Trả lời

5

Bạn có thể thử sử dụng document.implementation.createDocument. Khi bạn có tài liệu của mình, bạn có thể sử dụng thuộc tính innerHTML để đặt HTML cho tài liệu đó. Nếu bạn muốn điều đó được bọc trong một gói nhỏ gọn bạn có thể làm một cái gì đó như thế này:

function createDocument(html) { 
    var doc = document.implementation.createDocument ('http://www.w3.org/1999/xhtml', 'html', null); 
    doc.documentElement.innerHTML = html; 
    return doc; 
} 

Và sau đó bạn muốn sử dụng chức năng như thế này:

var doc = createDocument("<body><span>Hello StackOverflow.com!</span></body>"); 

Hãy cho tôi biết nếu điều này là những gì bạn đang tìm kiếm.

1

này hoạt động trong Firefox:

document.implementation.createDocument(null, "rootElement", null) 

Lưu ý rằng nó mang lại cho bạn một XMLDocument, chứ không phải là một HTMLDocument (như tài liệu chính nó).

2

Nếu bạn đang tìm kiếm để tái tạo một tài liệu (chẳng hạn như trong một khung nội tuyến), bạn có thể làm như vậy với ...

document.open(); 
document.write('<html><head></head><body>some stuff</body></html>'); 
document.close(); 

đây là cách bạn có thể sử dụng nó để tái tạo lại tài liệu của một động tạo iframe.

var iframe = document.createElement('iframe'), 
    iframeDoc = (iframe.contentDocument) 
       ? iframe.contentDocument : iframe.contentWindow.document; 

document.getElementById('iframeContainer').appendChild(iframe); 

iframeDoc.open(); 
iframeDoc.write('<html><head></head><body>howdy</body></html>'); 
iframeDoc.close(); 
11

Webkit là người đầu tiên bao gồm/phơi bày các phương pháp sau đây cho nhiệm vụ đó:

document.implementation.createHTMLDocument(title); 

Firefox, từ phiên bản 4, cũng thực hiện phương pháp này trong khi đối với các phiên bản trước đó là có thể tạo ra một file HTML tài liệu bằng cách sử dụng các mục sau:

var doc = document.implementation.createDocument('', '', 
    document.implementation.createDocumentType('html', '', '')); 

tương đương với tài liệu có <!DOCTYPE html> (HTML5).

Thay thế các chuỗi rỗng của 'createDocumentType' bằng publicId/systemId cần thiết.

Bạn vẫn cần tạo/thêm phần tử html, phần đầu và phần nội dung vào tài liệu kết quả để có DOM hoạt động.

+0

OK, nhưng nếu 'tài liệu' là không xác định thì sao? Có cách nào để tạo một tài liệu _ex nihilo_?Chắc chắn phải có một hàm xây dựng? – Lori

+1

@ user1269964 sau đó sử dụng 'DOMImplementation' thay vì' document.implementation'. https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation – m93a

+1

** CHỈNH SỬA: ** Xin lỗi. Không 'DOMImplementation' nhưng' (new Document()). – m93a

1

nếu createDocument (...) mang đến cho bạn phân tích lỗi, điều chỉnh câu trả lời của Dan sử dụng createHTMLDocument() thay vì:

function createDocument(html, title) { 
    var doc = document.implementation.createHTMLDocument(title) 
    doc.documentElement.innerHTML = html 
    return doc 
} 

sử dụng như:

var doc = createDocument('<!DOCTYPE html><html>' 
    + '<head><script src="foo.js"></script></head>' 
    + '<body></body></html>', 'test') 
console.log(doc.getElementsByTagName('script')) 

đầu ra:

[script foo.js] 
Các vấn đề liên quan