2012-11-02 15 views
7

Jak źle zrobić ukryć ukryty element?Ukryj ukryty element ... Jak źle?

Załóżmy, że element #myelement jest ukryty, a ja wykonuję numer $('#element').hide(). Czy to złe? Czy powinienem najpierw sprawdzić, czy jest on widoczny?

Dzięki!

+1

To źle, jak pokazano element bloku! :) jeśli mówisz o jednym tylko elemencie .... nie zawracaj sobie głowy. Klienci czekają. –

+0

Dlaczego ukryć ukryty element? Jaki jest tego cel? – Vucko

+0

@ Vucko: Nie celowo. Tylko po to, aby uniknąć komplikowania kodu (z logiką niezbędną do uniknięcia zbędnego ukrywania). – Thilo

Odpowiedz

14

jQuery sprawdza czy element jest widoczny i ukrywa tylko wtedy, gdy jest to widoczne: https://github.com/jquery/jquery/blob/master/src/css.js#L78

} else if (!values[ index ] && !isHidden(elem)) { 
     jQuery._data(elem, "olddisplay", curCSS(elem, "display")); 
    } 

więc nie trzeba przeprowadzić dodatkowe kontrole. Każda kontrola ręczna pogorszyłaby wydajność (i czytelność).

0

Jeśli ukryjesz element, który jest już ukryty, nic się nie wydarzy.

Jedynym sposobem, że jest "zły" jest to, że wykonuje kod, który nie musi być wykonany.

Można sprawdzić, czy jest ona ukryta użyciu jest():

if(!$("my-element").is(":visible")) { 
    $("my-element").hide(); 
}) 
+1

Jednak powoduje to wykonanie innego kodu, który nie musi być (kod kontrolny). – Thilo

+0

prawda, ale ten kod sprawdzający może być mniejszy niż wewnętrzny kod sprawdzania jQuery ...? Będę musiał je profilować, aby mieć pewność :) – danwellman

+0

w przypuszczalnie częstszym przypadku (że element rzeczywiście potrzebuje ukryć), * oba * kontrole będą uruchamiane. – Thilo

0

Tylko hiding, element nie trzeba by sprawdzić, czy element jest już hidden lub nie, ale jeśli masz sprawę jak wtedy, gdy element jest następnie pokazać jeszcze zrobić coś innego, a następnie można użyć

if ($('your-element').is(':hidden')) { 
$('your-element').show(); 
} else { 
//do something else 
} 
1

Jeżeli istnieje wybór pomiędzy

$("my-element").hide(); 

i

if(!$("my-element").is(":visible")) { 
    $("my-element").hide(); 
}) 

jest o wiele prostsze (lepiej?), Aby po prostu mieć pierwszą linię dla czytelności sake. jQuery zrobi to, czy to zrobisz, czy nie.

+0

Wygląda na to, że @zerkms powiedział już to samo. ** Powinienem ** naprawdę kliknąć na link "Ładuj nowy", myślę. – Abhilash

0

Lepiej sprawdzić widoczność elementu przed jego ukryciem.

$('#element').hide(); 

spowoduje to pewne problemy w przeglądarce Internet Explorer (IE9). Strona czasu nie ładuje się prawidłowo. Niektóre treści zostaną pominięte na stronie.

Poniższy kod jest znacznie lepszy.

if(!$("#myelement").is(":visible")) { 
    $("#myelement").hide(); 
})