2009-12-22 38 views
6

document.getElementById dường như không hoạt động trên tất cả các trình duyệt (có nghĩa là một số trình duyệt cũ) và tôi chắc chắn có những nhà phát triển không biết điều này.JS: Làm cách nào để tạo trình duyệt chéo document.getElementById?

Bạn sẽ đề xuất giải pháp nào để biến nó thành trình duyệt chéo?

Cảm ơn

+3

'document.getElementById' đang hoạt động ual một trong số ít những thứ không hoạt động trên một loạt các trình duyệt, về cơ bản bất cứ điều gì từ * * * năm qua, bao gồm cả IE6. Bạn đang cố gắng hỗ trợ trình duyệt cụ thể nào mà không triển khai? –

+3

Vui lòng chỉ định trình duyệt đó, Cảm ơn –

+4

Nếu document.getElementById không được hỗ trợ, đừng bận tâm với Javascript cho trình duyệt đó. – kgiannakakis

Trả lời

9

Nếu document.getElementById không làm việc thì một trong hai:

  • Bạn đang làm sai (HTML không hợp lệ, cố gắng để truy cập vào tên thay vì ID, vv)

hoặc

  • Bạn đang làm việc với Netscape 4.x và Internet Explorer 4.x

Có ba cách để xử lý các trình duyệt của thời đại này.

  • Yêu cầu mọi người nâng cấp. Họ là những cơn ác mộng không được duy trì, bảo mật cho người dùng và tác giả.
  • Build on stuff that works và chắc chắn rằng JS của bạn kiểm tra cho sự tồn tại của getElementById và bạn bè trước khi cố gắng sử dụng chúng (if (!document.getElementById) { return false; /* Insufficient DOM to bother with JS here */ })
  • Tìm hiểu về document.alldocument.layers
4

Bạn có chắc chắn không phải là this kind of problem? Có một cái nhìn thú vị của nó, tôi không biết điều đó trước đây.

Tuy nhiên, để bổ sung cho những gì đã được đề xuất bởi David Dorward, bạn viết một chức năng như dưới đây.

function getElement (id) { 

    if (document.getElementById) { 
    return document.getElementById(id); 
    } 

    else if (document.all) { 
    return window.document.all[id]; 
    } 

    else if (document.layers) { 
    return window.document.layers[id]; 
    } 
} 
1
getElemID(obj){ 

if(document.getElementByID){ 
return document.getElementByID(obj); 
} 

else if (document.all){ 
    return document.all[obj]; 
    } 

    else if (document.layers){ 
    return document.layers[obj]; 
    } 

    else { 
     alert("Could not find support"); 
     return false; 
     } 
} 
0
function getDOM() { 
    if (document.getElementById) { 
     return document.getElementById;  
    } 

    var window_document = window.document || {}; 
    var elements = window_document.all || window_document.layers; 
    if(elements) { 
     return function(x) { return elements[x]; } 
    } 

    // everything failed 
    throw new InternalError('No means to "getElementById"'); 
} 

... sau đó

var getElementById; 
try { 
    getElementById = getDOM(); 
} catch(err) { 
    alert(err); 
} 
// implicit 0K 
var oHTMLElement = getElementById('#main'); 
Các vấn đề liên quan