2011-01-22 40 views
11

Chuyển phần tử DOM tới WebNhững người làm việc khó hiểu vì tất cả các tham chiếu đến DOM đều bị 'mất'. Tôi cần kiểm tra các đối tượng được chuyển qua trước thông báo của WebWorker được gửi đi.Kiểm tra xem đối tượng có phải là phần tử DOM hay không

Cách nhanh nhất để kiểm tra xem thể hiện của đối tượng là phần tử DOM hay phần AND của cây DOM, OR có 'con' chứa bất kỳ tham chiếu nào đến cây DOM không?

mảnh của việc sử dụng:

var a = new SharedWorker("bigdatahandler.js"); 
a.postMessage(s); 

s //<--should not be a DOM object 
+0

này đã được trả lời ở đây: http: // stackoverflow.com/questions/4754088/how-to-check-if-object-is-a-dom-element/4754104#4754104;) –

Trả lời

8

Để kiểm tra xem nó là một yếu tố tôi nghĩ obj.nodeName là đặt cược tốt nhất của bạn.

var a = new SharedWorker("bigdatahandler.js"); 
if (!s.nodeName) { 
    a.postMessage(s); 
} 

Bạn cũng có thể kiểm tra s instanceof Element, bởi vì bạn không cần phải hỗ trợ IE Tôi đoán :)

Để kiểm tra xem nó là một phần của DOM:

function inDOM(elem) { 
    do { 
     if (elem == document.documentElement) { 
     return true; 
     } 
    } while (elem = elem.parentNode) 
    return false; 
}​ 
+1

... và để kiểm tra xem nó có bất kỳ "con" nào là các phần tử DOM hay không, bạn sẽ cần phải sử dụng nguồn gốc đệ quy trên tất cả các thuộc tính của mục (nếu đó là một đối tượng). –

+0

@TJ - Anh ấy nói * '" có 'con' chứa bất kỳ tham chiếu nào đến cây DOM "' *. Nếu phần tử không phải là một phần của DOM, con của nó không thể chứa các tham chiếu đến DOM, dễ dàng như vậy :) – galambalazs

+0

@gal Lưu ý, OP không nói phần tử DOM HTML, chỉ là phần tử DOM. (Ngoài ra, bên trong đó dài nick của bạn, mà là tên? :) Là @gal OK?) –

0

Kiểm tra s instanceof Node. Mỗi đối tượng DOM là Node.

+0

FileReader có phải là phần tử DOM không? Nó không vượt qua bài kiểm tra này. – jayarjo

+0

FileReader là * không * đối tượng DOM, nhưng bạn đúng là tôi đã sửa lỗi. 'NodeLists',' DOMStrings' và một vài cấu trúc danh sách khác không phải là 'Node', mà là các đối tượng DOM. –

+2

Bỏ phiếu xuống cho lỗi được xác nhận nhưng không được sửa. Tôi sẽ trở lại khi nó được sửa chữa. – danorton

10

Để kiểm tra xem một đối tượng là một thể hiện Element, sử dụng instanceof:

s instanceof Element 

Và để kiểm tra tài liệu chủ nhân của nó, sử dụng ownerDocument:

s.ownerDocument == document 
Các vấn đề liên quan