2013-04-15 32 views
5

Tôi có một phần tử có đường viền CSS và vấn đề là phần tử trống cho đến khi nội dung được lấp đầy bởi jQuery, nhưng đường viền được vẽ bởi CSS ngay từ đầu. Tôi muốn có thể làm điều gì đó như làm cho chế độ hiển thị yếu tố bị ẩn cho đến khi nó sẵn sàng hiển thị rồi hiển thị phần tử và đường viền trong một lần.Có chức năng "phần tử đã sẵn sàng" trong jquery không?

Có cách nào để đạt được điều này không?

Chỉnh sửa: mã để hiển thị nội dung được chứa bên trong

$(window).load(function() { 

} 
+0

khi bạn có muốn hiển thị phần tử không? Bất kỳ sự kiện cụ thể nào? – PSL

+0

có chỉnh sửa câu trả lời của tôi không? – byronyasgur

Trả lời

14

Phương pháp 1

Một phương pháp bạn có thể thử sẽ được thiết lập CSS của nguyên tố này để display:none;. Điều này sẽ ẩn phần tử và gọi hàm sau sẽ khiến phần tử hiển thị trên tải DOM.

$(document).ready(function() { 
    // Put all of jQuery code in here 
    $("element").show(); // substitute element for whatever is needed 
}); 

Tuy nhiên, tôi sẽ không đề nghị phương pháp này, vì sẽ có một bước nhảy đột ngột của nội dung khi jQuery thực hiện, bởi vì display:none; có nghĩa là sẽ không có dấu vết của các phần tử trên trang

Phương pháp 2

Phương pháp tốt nhất theo ý kiến ​​của tôi là sử dụng visibility:hidden. Điều này sẽ gây ra không gian nơi phần tử thường vẫn xuất hiện, nhưng sẽ có khoảng trắng ở vị trí của phần tử. Bằng cách đó, khi tải trang, không có một bước nhảy đột ngột nào về nội dung. Nếu bạn sử dụng phương pháp này, bạn sẽ cần phải sử dụng phương pháp .css(), vì .show() được về cơ bản thiết lập CSS của nguyên tố này để display:block; Vì vậy, các mã sẽ trông như thế này

$(document).ready(function() { 
    // Put all of jQuery code in here 
    $("element").css("visibility", "visible") // substitute element for whatever is needed 
}); 

Đối với cả hai phương pháp, CSS sẽ làm cho phần tử bị ẩn và hàm này đợi cho đến khi toàn bộ DOM được tải trước khi nó thực hiện.

+0

OP chỉ thêm mã tùy chỉnh đúng là 'show()' –

+0

+1 Tôi thích điều này, nhưng nếu đây là một yếu tố tắt, tôi có thể chỉ đặt nội tuyến 'style = 'display: none'' thay vì hiển thị CSS . – AaronLS

+0

tôi có thể đặt các công cụ doc.ready bên trong window.load hoặc nó nên ở bên ngoài. thực sự chỉ tự hỏi về việc giữ mã bên cạnh mã ban đầu vì tôi có một chút các công cụ liên quan khác trong cùng khối tải – byronyasgur

2

Bạn có thể sử dụng jQuery addClass để thêm một phong cách mà được biên giới, hoặc có lẽ removeClass để loại bỏ một lớp ẩn display:none;

Và để trả lời câu hỏi tiêu đề của bạn, đó là document.ready mà bạn đang tìm kiếm!

0

Bạn có thể sử dụng

$(function(){ 
    // your code here 
}); 

Vì vậy, bên trên được thực hiện khi DOM được nạp. Bây giờ tất cả những gì bạn cần làm là hiển thị phần tử của bạn có visibility:hidden được đặt trong css.

+0

Khi bạn sử dụng display: none, phần tử không thực sự được tải. Đây là lý do tại sao nhiều người đề nghị hiển thị: ẩn thay thế. display: none không chiếm một không gian dom, trong khi tầm nhìn: hidden và opacity: 0 cả hai đều làm. –

-2

Bạn đã thử .css()? Bạn có thể thay đổi css của một phần tử. Đọc thêm here.

Ban đầu, đặt làm ẩn, sau đó xóa.

+0

Tôi biết nhưng thực sự câu hỏi của tôi là khi/làm thế nào để thời gian nó, nhờ – byronyasgur

+0

Tôi thấy. Câu trả lời của Cody Guldner là con đường để đi! – Doon

2

Ẩn mục của bạn lúc đầu.

$(function(){ 
    $('selector').hide(); // Or you can just have display:none 
    }); 

Trong một số phần khác một số sự kiện điền vào div của bạn với một số nội dung

.... 
....//some code that fills in your content 
... 
$('selector').show(); 
.... 
.... 
0

Ready trên các yếu tố sẽ làm việc:

$(document.getElementsByTagName('div')[0]).ready(function() { 
// do stuff when div is ready 
0

Hãy thử điều này:

$('#element').bind("DOMSubtreeModified", function() { 
    //do stuff 
}); 
+0

Xấu, xem https://stackoverflow.com/questions/6659662/why-is-the-domsubtreemodified-event-deprecated-in-dom-level-3 – Lodewijk

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