Jak dodać display: inline-block w funkcji show () jQuery?


158

Mam taki kod:

function switch_tabs(obj) {
    $('.tab-content').hide();
    $('.tabs a').removeClass("selected");

    var id = obj.attr("rel");
    $('#' + id).show();
    obj.addClass("selected");
}

Funkcja show dodaje display:block. Ale chciałbym dodać display:inline-blockzamiast bloku.


1
Musisz podać więcej szczegółów. U mnie działa w szybkim teście: jsfiddle.net/DD3Sf .
Gijs,

@gijs Przepraszamy, teraz działa. Myślę, że to jakiś problem z pamięcią podręczną. Dzięki za
poświęcony

Odpowiedzi:


209

Zamiast tego showspróbuj użyć CSS, aby ukryć i pokazać zawartość.

function switch_tabs(obj) {
    $('.tab-content').css('display', 'none'); // you could still use `.hide()` here
    $('.tabs a').removeClass("selected");
    var id = obj.attr("rel");

    $('#' + id).css('display', 'inline-block');
    obj.addClass("selected");
}

92
Może się to wydawać oczywiste, ale jeśli nadal chcesz wykorzystać aspekt czasowy funkcji show( $("#id").show(500)), po prostu dodaj do niego cssfunkcję:$("#id").show(500).css("display", "inline-block");
BenR

2
Poszedłbym o krok dalej i zająłbym się całym ukrywaniem / wyświetlaniem za pomocą klas CSS, a nie jQuery. $('.tab-content').addClass('hidden'); (...) $('#' + id).removeClass('hidden'); W CSS:.hidden { display: none !important }
Joe Maffei

10
Mimo że jest to akceptowana odpowiedź, ale nie odzwierciedla tego, co zostało powiedziane w dokumentacji jquery : jest to mniej więcej równoważne wywołaniu .css ("display", "block"), z wyjątkiem tego, że właściwość display jest przywracana do stanu, w jakim była początkowo. Jeśli element ma wyświetlaną wartość inline, a następnie jest ukryty i pokazany, zostanie ponownie wyświetlony w tekście. Aby mieć wartość domyślną display, musisz dodać klasę do swojego css, a display:inline-block;następnie wywołać hide()i show()użyć identyfikatora elementu. Jest to czystszy i bardziej przewidywalny kod oraz łatwiejszy do stylizacji.
Abdullah Adeeb

1
@AbdullahAdeeb problem polega na tym, że hide()przy ładowaniu strony trzeba by było użyć js. Ustawienie #element{display:inline-block;display:none;}nie działa. Myślę, że najczystszym rozwiązaniem jest $('#element').fadeIn().addClass('displaytype');- lepsze niż odpowiedź powyżej, ponieważ możesz ustawić różne .displaytypes w css i mieć jedną pokazującą funkcję w js. Zobacz moją odpowiedź tutaj: stackoverflow.com/questions/1091322/…
Fanky

36

Ustawienie właściwości CSS po użyciu .show()powinno działać. Być może kierujesz na niewłaściwy element na swojej stronie HTML.

 $('#foo').css('display', 'inline-block');

Ale jeśli nie używasz żadnych efektów, .show(), .hide()dlaczego nie ustawisz tych właściwości CSS ręcznie, na przykład:

$('#foo').css('display','none'); 
$('#foo').css('display','inline-block');

3
Zauważ, że jquery show / hide / toggle przywraca poprzednie wyświetlane wartości. Więc jeśli ukryjesz to za pomocą jquery, call show zadziała.
Curtis Yallop

„Ustawienie właściwości CSS po użyciu .show () powinno działać”. Jaki jest sens używania show (), jeśli mimo wszystko zamierzasz ręcznie zaktualizować css?
JSON

9

Użyj css () zaraz po show () lub fadeIn () w ten sposób:

$('div.className').fadeIn().css('display', 'inline-block');

5

ja to zrobiłem

function showPanels()  {
    $('.panels').show("slow");
    $('.panels').css('display','inline-block');
}

działa jak marzenie.


7
Czy to odpowiedź czy potwierdzenie…?
NREZ

5

Rozwiązanie Razza zadziałałoby w przypadku metod .hide()i .show(), ale nie zadziałałoby w przypadku .toggle()metody.

W zależności od scenariusza posiadanie klasy css .inline_block { display: inline-block; }i wywołanie $(element).toggleClass('inline_block')rozwiązuje problem za mnie.


2

Możesz użyć animacji zamiast pokaż / ukryj

Coś takiego:

function switch_tabs(obj)
{
    $('.tab-content').animate({opacity:0},3000);
    $('.tabs a').removeClass("selected");
    var id = obj.attr("rel");

    $('#'+id).animate({opacity:1},3000);
    obj.addClass("selected");
}

2

Spróbuj tego:

$('#foo').show(0).css('display','inline-block');

W show()tym jest bezcelowe. To jest to samo co$('#foo').css('display','inline-block');
Liam

@Liam Nie ma sensu. Możesz zmienić 0, aby ułatwić, lub zmodyfikować to, aby uzyskać dostęp do innych unikalnych showopcji.
JSideris

2

Myślę, że chcesz zarówno animację, jak i ustawić właściwość wyświetlania na końcu. W takim przypadku lepiej użyj funkcji show()oddzwaniania, jak pokazano poniżej

$("#my_obj").show(400,function() {
    $("#my_obj").css("display","inline-block")
}) ;

W ten sposób osiągniesz oba rezultaty.


To nie jest poprawne, skończyłbyś z inline-blocktrybem dopiero po uruchomieniu całej animacji. Oznacza to, że „wyskoczy” pomiędzy blocki inline-blockpo 400 ms.
Alexis Wilke

1
<style>
.demo-ele{display:inline-block}
</style>

<div class="demo-ele" style="display:none">...</div>

<script>
$(".demo-ele").show(1000);//hide first, show with inline-block
<script>

0

w rzeczywistości jQuery po prostu czyści wartość właściwości 'display' i nie ustawia jej na 'block' (zobacz wewnętrzną implementację jQuery.showHide ()) -

   function showHide(elements, show) {
    var display, elem, hidden,

...

         if (show) {
            // Reset the inline display of this element to learn if it is
            // being hidden by cascaded rules or not
            if (!values[index] && display === "none") {
                elem.style.display = "";
            }

...

        if (!show || elem.style.display === "none" || elem.style.display === "") {
            elem.style.display = show ? values[index] || "" : "none";
        }
    }

Pamiętaj, że możesz przesłonić $ .fn.show () / $. Fn.hide (); przechowywanie oryginalnego wyświetlania w samym elemencie podczas ukrycia (np. jako atrybut lub w $ .data ()); a następnie zastosuj go ponownie podczas wyświetlania.

Ważne jest również używanie CSS ! prawdopodobnie nie zadziała tutaj - ponieważ ustawienie stylu w linii jest zwykle silniejsze niż jakakolwiek inna reguła


0

Najlepszym. Niech będzie rodzicem display :inline-blocklub dodaj rodzica divtylko z CSS display :inline-block.


-5

Najlepszym sposobem jest dodanie! Ważnego sufiksu do selektora.

Przykład:

 #selector{
     display: inline-block !important;                   
}

3
czy to nie zapobiega .hide ()?
Kaan Soral

! ważne jest konieczne tylko w skrajnych przypadkach, gdy nie ma innej opcji. Moim zdaniem nie jest to właściwy sposób podejścia do tego problemu, skoro można go naprawić lepszym kodem jQuery.
Brandon

6
Ważne jest, aby pamiętać o !importantto, że jest ważne, aby nie używać.
user1728278
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.