2010-05-27 35 views
26

tôi có 2 khung hình trong một trang như thế này (home.html)Làm thế nào để truy cập vào khung (không iframe) nội dung từ jQuery

<frameset rows="50%, 50%"> 
     <frame id="treeContent" src="treeContent.html" /> 
     <frame id="treeStatus" src="treeStatus.html" /> 
</frameset> 

và sau đó trong một khung hình (treeStatus.html) Tôi có một cái gì đó như

<body style="margin: 0px"> 
<div id="statusText">Status bar for Tree</div> 
</body> 

Tôi muốn từ cửa sổ trên cùng để thao tác div nằm trong khung con qua jquery (ví dụ: hiển thị và ẩn).

Tôi đã thấy severalquestionslikethis và họ đề nghị như sau

$(document).ready(function(){ 

      $('#treeStatus').contents().find("#statusText").hide(); 
    }); 

Tôi không biết nếu điều này làm việc với iframe nhưng trong trường hợp của tôi, nơi tôi có khung đơn giản, nó dường như không làm việc. Mã này được đặt bên trong home.html

Dưới đây là một số đầu ra từ bảng điều khiển firebug

>>> $('#treeStatus') 
[frame#treeStatus] 
>>> $('#treeStatus').contents() 
[] 
>>> $('#treeStatus').children() 
[] 

Vì vậy, làm thế nào để truy cập vào các yếu tố khung từ khung trên? Am i thiếu cái gì ở đây?

trả lời

Sau khi kết hợp cả hai câu trả lời ở đây, cách chính xác là

$('#statusText',top.frames["treeStatus"].document).hide(); 

Đối với điều này để làm việc theo khung phải có tên thuộc tính ngoài các id, như thế này:

<frameset rows="50%, 50%"> 
      <frame id="treeContent" src="treeContent.html" /> 
      <frame name="treeStatus" id="treeStatus" src="treeStatus.html" /> 
    </frameset> 
+0

Chỉ cần một lưu ý : tại sao sử dụng khung khi bạn có thể sử dụng 'vị trí: cố định' để thêm thanh trạng thái (hoặc đăng nhập được đề xuất theo kích thước) luôn ở cuối chế độ xem ... hỗ trợ trình duyệt cũ? – alex

+0

@alex đây chỉ là một ví dụ tối thiểu tôi đã tạo cho stackoverflow. Ứng dụng thực sự hoàn toàn khác. Nó phức tạp hơn các thanh trạng thái đơn giản. Khung là một yêu cầu (Đừng hỏi!). – kazanaki

+0

OK, đừng lo. Chỉ cần nghĩ rằng tôi muốn thêm rằng (một số người không biết về 'vị trí: cố định'). – alex

Trả lời

11

Bạn có thể lấy Khung và div bạn muốn thao tác và chuyển nó thành một biến.

var statusText = top.frames["treeStatus"].document.getElementById('statusText'); 

Sau đó, bạn có thể thực hiện mọi thứ bạn muốn qua jQuery.

$(statusText).whatever(); 

Mặc dù đôi khi bạn không thể xoay quanh việc sử dụng khung, hãy nhớ rằng thẻ <frame> đã lỗi thời trong HTML5. Nếu bạn có kế hoạch chuyển sang HTML5, bạn sẽ phải sử dụng iFrames.

+0

Không chính xác những gì tôi muốn bởi vì tôi tin rằng toàn bộ mục đích của jQuery là tránh getElementById. Tuy nhiên câu trả lời của bạn đã giúp tôi làm những gì tôi muốn vì vậy tôi chấp nhận nó. – kazanaki

+0

người đăng bài tuyệt vời, làm việc như một nội dung hấp dẫn –

5

Bạn cần cung cấp tham chiếu đến khung bạn những gì để truy cập:

$("some selector", top.frames["treeStatus"])) 
+2

Tôi đã thử điều này và nó không hoạt động một mình. Sau khi nhìn thấy câu trả lời của di động tôi đã làm cho nó hoạt động với $ ("một số selector", top.frames ["treeStatus"]. Tài liệu)) và cũng thêm "treeStatus" như một tên ngoài id – kazanaki

4

Tôi có khung lồng nhau.Trong trường hợp của tôi, để làm cho nó làm việc tôi sử dụng lệnh:

var statusText = 
top.document.getElementById("treeStatus").contentDocument.getElementById("statusText"); 

Sau đó, khi Charles đã trả lời, bạn có thể làm bất cứ điều gì bạn muốn nó qua jQuery:

$(statusText).whatever(); 
+0

contentTài liệu là những gì tôi đang tìm kiếm! Tôi cũng có khung lồng nhau, cảm ơn cho bài đăng này! – NetWave

2

Đối với một giải pháp jquery tinh khiết (mà không yêu cầu top.frames vv), sau đây dường như làm việc:

$('some selector for item from frame' ,$('frame selector')[0].contentDocument) 

này có ưu điểm là nó hoạt động cho khung lồng nhau:

$('inner frame item selector', $('inner frame selector', $('outer frame selector')[0].contentDocument)[0].contentDocument) 
Các vấn đề liên quan