2011-11-29 28 views
5

Các trang web công ty và dev của chúng tôi có phân cấp khung hơi khác nhau.jQuery: Tìm một phần tử, bất kể khung

Rất thỉnh thoảng tôi cần tham khảo phần tử trong một khung khác.

Thật không may, tôi không biết khung đó sẽ ở đâu trong cấu trúc phân cấp. Tuy nhiên tôi biết đó là id.

Làm cách nào để tìm khung hoặc phần tử cụ thể khi tôi không biết cấu trúc chính xác?

Để làm rõ Trong dev, về cơ bản nó chỉ là một trang có chứa khung. Tôi đang ở trong bối cảnh của khung hình, và chỉ sử dụng window.top.document để lấy tài liệu mà tôi muốn.

Trong sản phẩm, lồng nhau là khác nhau, window.top.document không hoạt động vì nó nằm trong hai khung khác.

Tôi không thể thay đổi cấu trúc này, nó chỉ là cách cổng ứng dụng hoạt động.

Trả lời

3

có thể bạn có thể thử đi qua tất cả các khung. bạn sẽ cần phải sử dụng tìm kiếm rộng đầu tiên hoặc chiều sâu tùy thuộc vào độ sâu của khung làm tổ. vượt qua nó gốc ban đầu.

frameSearch(yourElementId,$("frame")); 

function frameSearch(elementId,frames){ 
     if (!(frames)) {return "element not found";} 
     $.each(frames,function(){ 
      var $elementFound = this.find("#"+elementId); 
      if ($elementFound){ 
       return $elementFound; 
      } 
      var newFrames = this.find("frame"); 
      if (newFrames) {frameSearch(elementId,newFrames);} 
     }); 
} 

Tôi không chắc chắn 100% tính chính xác của thuật toán đệ quy này nhưng đây là ý tưởng đúng tôi tin.

EDIT:

nếu bạn cần phải tìm ra cha mẹ trên cùng, hãy thử:

var $currentDocument = $("document"); 
    while ($currentDocument.parent()){ 
     if ($currentDocument.find("#"+yourElementId)){ 
       $yourElement = $currentDocument.find("#"+yourElementId); 
       break; 
     } 
     $currentDocument = $currentDocument.parent(); 
    } 

    if (!($yourELement)){ 
     $yourElement = frameSearch(yourElementId,$("frame")); 
    } 

này sẽ kiểm tra trở lên trước, sau đó xuống nếu điều đó không làm việc

0

Nếu bạn biết id của khung, bạn chỉ có thể sử dụng công cụ chọn id và phương pháp contents() để tìm các phần tử trong khung nội tuyến. Hãy thử điều này

$("#iframeId").contents().find("elementToFind") 
+0

tôi không nghĩ rằng điều này sẽ làm việc cho một khung trong một khung mà là vấn đề không? – Evan

+0

Tôi tin rằng điều này chỉ hoạt động đi xuống cây, không sao lưu – CaffGeek

+0

Điều này sẽ tìm kiếm các yếu tố trong iframe được chọn. – ShankarSangoli

6

Nếu iframe là từ cùng một miền, các yếu tố có thể dễ dàng truy cập qua jQuery dưới dạng

$("#frameID").contents().find("#elementID").hide(); 

Có một vài trường hợp ngoại lệ Here về miền nước ngoài:

0

này làm việc cho tôi ...

USERNAME='input#username'; 

    frame_count=window.parent.frames.length; 
    for(f=0;f<frame_count-1;f++){ 
     test_frame=window.parent.frames[f].document.body; 
     if ($(USERNAME, test_frame).length==1) { 
      INPUT_FRAME=f; 
      break; 
     }; 
    }; 

detail_frame=window.parent.frames[INPUT_FRAME].document.body; 

$(USERNAME, detail_frame).val(username); 
Các vấn đề liên quan