2012-03-28 21 views
11

Tôi đã tạo một đối tượng tại thời gian chạy bằng cách sử dụng thẻ innerHTML, bây giờ tôi muốn truy cập phần tử này bằng cách sử dụng getElementById, khi tôi truy cập phần tử giá trị NULL trả về của nó. Vui lòng đề nghị cho tôi bất kỳ hướng để tôi có thể đạt được điều này,getElementById Trong đó Element được tạo động trong thời gian chạy

Dưới đây là gợi ý mã sau đây mà tôi đang sử dụng

Trong HTML

<div id="web"> 
<object id="test"></object> 
</div> 

Trong JS

document.getElementById("web").innerHTML="<object id='test2'></object>"; 
. 
. 
var obj = document.getElementById("test2"); 

Đây obj trả về giá trị null.

+3

Một số đoạn mã sẽ hữu ích. – Sirko

+0

Vui lòng sử dụng jsFiddle.net –

+0

Hãy thử sử dụng đoạn mã từ [ở đây] [1] [1]: http://stackoverflow.com/questions/343145/does-getelementbyid-work-on-elements -created-by-javascript – Elena

Trả lời

12

Bạn đã chỉ định id cho phần tử mới được tạo chưa? Bạn đã chèn phần tử vào cây tài liệu chưa (sử dụng appendChild hoặc insertBefore)? Miễn là phần tử không được chèn vào DOM, bạn không thể truy xuất phần tử đó bằng cách sử dụng document.getElementById.

Ví dụ về việc tạo ra yếu tố:

var myDiv = document.createElement('div'); 
myDiv.id = 'myDiv'; 
document.body.appendChild(myDiv); 
document.getElementById('myDiv').innerHTML = 'this should have worked...'; 

[chỉnh sửa] Với mã đã cung cấp sau đó, một câu hỏi thứ ba xuất hiện: là kịch bản của bạn nằm ở dưới cùng của trang html của bạn (ngay trước thẻ đóng </body>)? Nếu nó nằm trong tiêu đề của tài liệu, tập lệnh của bạn có thể đang chạy trước khi cây tài liệu được hiển thị hoàn toàn. Nếu kịch bản của bạn phải trong tiêu đề của tài liệu, bạn có thể sử dụng một bộ xử lý tải để chạy nó sau rendering của tài liệu:

window.onload = function(){ 
    document.getElementById("web").innerHTML='<object id="test2"></object>'; 
    // [...] 
    var obj = document.getElementById('test2'); 
}; 
1

Để thêm một yếu tố sử dụng JavaScript, bạn cần phải làm 2 việc .

  1. Tạo các yếu tố

    var element = document.createElement (tagname);

  2. Thêm nó vào dom

    document.body.insertBefore (selector, phần tử);

hoặc

document.getElementByID(selector).appendChild(element); 

Thông tin thêm ở đây: MDN

-2

Nếu một nút DOM là tự động tạo ra, sau đó không cần bao giờ hết để tìm thấy nó một lần nữa với document.getElementById().

Bằng cách tạo nút đúng cách, bạn có thể giữ tham chiếu đến nút đó dưới dạng biến javascript, có thể được sử dụng ở bất kỳ đâu trong phạm vi.

Ví dụ:

window.onload = function(){ 
    var myDiv = document.createElement('div'); 
    document.body.appendChild(myDiv); 

    //and now a function that's called in response to some future event 
    function whatever(){ 
     ... 
     myDiv.style.color = 'red'; 
     ... 
    } 
}; 

Lưu ý: Chức năng bên trong (gọi tại một số điểm (s) trong tương lai) có quyền truy cập vào biến myDiv vì chức năng bên ngoài tạo thành một "đóng cửa", trong đó các biến được lưu giữ sống và dễ tiếp cận, mặc dù chức năng bên ngoài đã hoàn thành và trả về.

+0

hey @ Beetroot-Beetroot, ... Tôi nghĩ rằng đây sẽ là một rắc rối nếu một yếu tố mới được tạo ra nhưng chúng tôi không biết biến tham chiếu. Làm thế nào để đạt được điều đó getElementById() anyway? bất kỳ bên thứ 3 nào được tiêm hoặc một cái gì đó .... – gumuruh

+0

Điều này không trả lời được câu hỏi. Tốt hơn là không nên giả định bất cứ điều gì về cơ sở mã của họ. Việc tạo phần tử đó có thể là một phần của cơ sở mã không thể tiếp cận được với phần lấy phần tử đó. Ngay cả khi có thể truy cập được, hãy xem xét những người khác đến câu hỏi này đang tìm kiếm câu trả lời cho câu hỏi được hỏi, chứ không phải giải pháp phù hợp với người cụ thể này. – Variadicism

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