2013-04-15 21 views
5

Mam element, który ma granicę CSS i problem polega na tym, że element jest pusty, dopóki zawartość nie zostanie wypełniona przez jQuery, ale od samego początku obramowanie jest rysowane przez CSS. Chciałbym móc zrobić coś w rodzaju , aby ukryć widoczność elementu, dopóki nie będzie gotowe do wyświetlenia , a następnie pokaż element i ramkę za jednym razem.Czy w jquery jest funkcja "element gotowy"?

Czy jest jakiś sposób, aby to osiągnąć?

Edit: kod, aby wyświetlić zawartość są zawarte wewnątrz

$(window).load(function() { 

} 
+0

kiedy czy chcesz pokazać element? Jakieś szczególne wydarzenie? – PSL

+0

czy mogę edytować? – byronyasgur

Odpowiedz

14

Metoda 1

Jedną z metod można spróbować będzie ustawienie CSS elementu do display:none;. Spowoduje to ukrycie elementu, a wywołanie następującej funkcji spowoduje wyświetlenie elementu przy obciążeniu DOM.

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

Jednak nie sugerowałoby tę metodę, ponieważ nie będzie nagły skok zawartości raz jQuery wykonuje, ponieważ display:none; oznacza, że ​​nie będzie żadnego śladu elementu na stronie

Metoda 2

Najlepszą metodą, według mnie, byłoby użycie visibility:hidden. Spowoduje to, że przestrzeń, w której element zazwyczaj ma się nadal pojawiać, będzie zawierała białą przestrzeń zamiast elementu. W ten sposób, gdy strona ładuje się, nie ma nagłego skoku treści. Jeśli używasz tej metody, trzeba będzie użyć metody .css(), ponieważ .show() zasadniczo ustawienie CSS elementu do display:block; Więc kod będzie wyglądać następująco

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

dla obu tych sposobach, CSS uczyń element ukrytym, a ta funkcja czeka, aż cały DOM zostanie załadowany, zanim zostanie wykonany.

+0

OP dodaje kod niestandardowy tuż przed 'show()' –

+0

+1 Podoba mi się to, ale jeśli byłby to element jednorazowy, prawdopodobnie ustawiłbym inline 'style = 'display: none'' zamiast widoczności CSS . – AaronLS

+0

Czy mogę umieścić dokumenty doc.ready w pliku window.load lub na zewnątrz. Naprawdę tylko zastanawiasz się nad zachowaniem kodu obok oryginalnego kodu, ponieważ mam sporo innych powiązanych rzeczy w tym samym bloku ładującym. – byronyasgur

0

Można użyć

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

więc powyższe zostanie wykonany, gdy DOM jest załadowany. Teraz wszystko, co musisz zrobić, to pokazać element, który miał visibility:hidden ustawiony w css.

+0

Kiedy używasz display: none, element faktycznie nie jest ładowany. Dlatego wiele osób zaleca widoczność: zamiast tego ukryte. display: none nie zajmuje przestrzeni w domenie, a visibility: hidden i opacity: 0 both. –

-2

Czy próbowałeś już .css()? Możesz zmienić wartość css elementu. Czytaj więcej here.

Początkowo ustaw go jako ukryty, a następnie usuń.

+0

Wiem, ale naprawdę moje pytanie brzmi, kiedy/jak to czas, dzięki – byronyasgur

+0

Widzę. Odpowiedź Cody'ego Guldnera jest drogą do wyjścia! – Doon

2

Najpierw ukryj swój przedmiot.

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

W innej sekcji jakieś zdarzenie wypełnia w div z niektórych treści

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

Gotowe elementy będą działać:

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

Spróbuj tego:

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

Zdegenerowane, zobacz https://stackoverflow.com/questions/6659662/why-is-the-domsubtreemodified-event-deprecated-in-dom-level-3 – Lodewijk

Powiązane problemy