JQuery show () işlevinde display: inline-block nasıl eklenir?


158

Ben böyle bir kod var:

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

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

Show işlevi eklenir display:block. Ama display:inline-blockblok yerine eklemek istiyorum .


1
Daha fazla ayrıntı vermeniz gerekecek. Hızlı bir testte benim için çalışıyor: jsfiddle.net/DD3Sf .
Gijs

@gijs Üzgünüz, şimdi çalışıyor. Bence bu bazı önbellek sorunu. Zaman ayırdığınız için teşekkürler
Giri

Yanıtlar:


209

Bunun yerine show, içeriği gizlemek ve göstermek için CSS kullanmaya çalışın.

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
Bu bariz görünebilir, ancak yine de show( $("#id").show(500)) ' nin zamanlama yönünü kullanmak istiyorsanız , cssişlevi ekleyin :$("#id").show(500).css("display", "inline-block");
BenR

2
Bir adım daha ileri götürür ve jQuery değil, CSS sınıflarını kullanarak tüm gizleme / gösteren ilgilenir. $('.tab-content').addClass('hidden'); (...) $('#' + id).removeClass('hidden'); CSS'de:.hidden { display: none !important }
Joe Maffei

10
Bu kabul edilen yanıt olsa da, jquery belgelerinde belirtilenleri yansıtmaz : Bu, display özelliğinin başlangıçta ne olursa olsun geri yüklenmesi dışında .css ("display", "block") çağrısına kabaca eşdeğerdir. Bir öğenin satır içi görüntüleme değeri varsa, gizlenir ve gösterilirse, yine satır içi olarak görüntülenir. Öyleyse bir varsayılana sahip olmak displayiçin css'inize bir sınıf eklemeniz ve display:inline-block;ardından öğenin kimliğini çağırmanız hide()ve show()kullanmanız gerekir. Bu daha temiz ve daha öngörülebilir bir koddur ve şekillendirilmesi daha kolaydır.
Abdullah Adeeb

1
@AbdullahAdeeb sorun hide()js tarafından sayfa yükü gerekir. Ayar #element{display:inline-block;display:none;}yapmaz. Bence en temiz çözüm $('#element').fadeIn().addClass('displaytype');- yukarıdaki cevaptan daha iyidir, çünkü .displaytypecss'de farklı s ayarlayabilir ve js'de bir işlev gösterebilirsiniz. Cevabımı burada görebilirsiniz: stackoverflow.com/questions/1091322/…
Fanky

36

Kullandıktan sonra CSS özelliğini ayarlamak .show()işe yarayacaktır. Belki HTML sayfanızdaki yanlış öğeyi hedefliyorsunuz.

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

Ancak, .show(), .hide()neden herhangi bir efekt kullanmıyorsanız, bu CSS özelliklerini manuel olarak şu şekilde ayarlamıyorsunuz:

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

3
Jquery show / hide / toggle öğesinin önceki görüntüleme değerlerini geri yüklediğini unutmayın. Yani jquery ile gizlerseniz, arama şovu işe yarayacaktır.
Curtis Yallop

".Show () yöntemini kullandıktan sonra CSS özelliğinin ayarlanması gerekir." Eğer yine de css'i manuel olarak güncelleyecekseniz show () kullanmanın anlamı nedir?
JSON

9

Show () veya fadeIn () yönteminden hemen sonra css () kullanın:

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

5

Ben bunu yaptım

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

tıkır tıkır çalışıyor.


7
Bu bir cevap mı, yoksa bir onay mı?
NREZ

5

Razz'ın çözümü .hide()ve .show()yöntemleri için işe yarayacak, ancak .toggle()yöntem için işe yaramayacaktır .

Senaryoya bağlı olarak, bir css sınıfına sahip olmak .inline_block { display: inline-block; }ve çağırmak $(element).toggleClass('inline_block')sorunu benim için çözer.


2

Show / hide animasyonunu kullanabilirsiniz

Bunun gibi bir şey:

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

bunu dene:

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

Bu show()anlamsız. Bu aynı$('#foo').css('display','inline-block');
Liam

@Liam Anlamsız değil. Kolaylaştırmak için 0'ı değiştirebilir veya diğer benzersiz showseçeneklere erişmek için bunu değiştirebilirsiniz .
JSideris

2

Sanırım hem animasyon hem de sonunda display özelliğini ayarlamak istiyorsunuz. Bu durumda show(), aşağıda gösterildiği gibi geri aramayı daha iyi kullanırsınız

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

Bu şekilde her iki sonucu da elde edersiniz.


Bu doğru değil, inline-blocksadece tüm animasyon çalıştıktan sonra moda geçersiniz. Bu , 400 ms arasında blockve inline-blocksonrasında "patlayacağı " anlamına gelir .
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

aslında jQuery sadece 'display' özelliğinin değerini temizler ve bunu 'block' olarak ayarlamaz (bkz. jQuery.showHide () dahili uygulaması) -

   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";
        }
    }

Lütfen $ .fn.show () / $. Fn.hide (); gizlendiğinde orijinal görüntüyü öğenin kendisinde saklamak (örneğin bir özellik olarak veya $ .data ()); ve gösterirken tekrar uygular.

Ayrıca, css kullanarak önemli! muhtemelen burada çalışmaz - çünkü bir stil satır içi ayarlamak genellikle diğer kurallardan daha güçlüdür


0

En iyisi .let üst öğe display :inline-blockveya divyalnızca CSS'nin sahip olduğu bir üst öğe ekleyin display :inline-block.


-5

En iyi yol seçiciye! Son ekini eklemektir.

Misal:

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

3
bu .hide () işlevini engellemiyor mu?
Kaan Soral

! Önemli sadece başka seçenek olmadığında kenar durumlarda gereklidir. Bence daha iyi jQuery kodu ile düzeltilebilir zaman bu soruna yaklaşmak için doğru bir yol değil.
Brandon

6
Hatırlanması gereken önemli şey !important, onu kullanmamanın önemli olduğudur.
user1728278
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.