如何在jQuery show()函数中添加display:inline-block?


158

我有一些这样的代码:

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

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

show函数添加display:block。但是我想添加display:inline-block而不是阻止。


1
您需要提供更多详细信息。在快速测试中它对有用jsfiddle.net/DD3Sf
Gijs 2012年

@gijs对不起,现在可以正常工作。我认为这是一些缓存问题。感谢您的
宝贵

Answers:


208

而不是show,请尝试使用CSS隐藏和显示内容。

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

91
这看起来似乎很明显,但是如果您仍然想利用show$("#id").show(500))的计时方面,只需将css函数附加到它:$("#id").show(500).css("display", "inline-block");
BenR 2013年

2
我将更进一步,并使用CSS类(而不是jQuery)处理所有隐藏/显示操作。 $('.tab-content').addClass('hidden'); (...) $('#' + id).removeClass('hidden'); 在CSS中:.hidden { display: none !important }
Joe Maffei

10
即使这是可接受的答案,但它不能反映jquery docs中的内容这与调用.css(“ display”,“ block”)大致等效,只是将display属性恢复到最初的状态。如果元素的显示值为inline,则将其隐藏并显示,它将再次以inline显示。 因此,要获得默认值,display您需要在CSS中添加一个类,display:inline-block;然后调用hide()show()使用元素的ID。这是更干净,更可预测的代码,并且更易于样式设置。
阿卜杜拉·阿迪卜

1
@AbdullahAdeeb的问题是您需要hide()在页面加载时通过js。设置#element{display:inline-block;display:none;}不起作用。我认为最干净的解决方案是$('#element').fadeIn().addClass('displaytype');-比上面的答案更好,因为您可以.displaytype在CSS中设置不同的s,并在js中显示一个功能。在这里查看我的答案:stackoverflow.com/questions/1091322/…–
Fanky

36

使用完后设置CSS属性.show()应该可以。也许您在HTML页面上定位了错误的元素。

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

但是,如果您不使用任何效果,.show(), .hide()为什么不手动设置这些CSS属性,例如:

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

3
请注意,jquery show / hide / toggle可以恢复以前的显示值。因此,如果使用jquery隐藏它,则可以调用show。
柯蒂斯·雅洛普

“使用.show()后设置CSS属性应该可以。” 如果您仍然要手动更新css,那么使用show()有什么意义呢?
JSON


5

我做到了

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

奇迹般有效。


7
这是一个答案还是一个确认。
NREZ,2013年

5

Razz的解决方案适用于.hide().show()方法,但不适用于该.toggle()方法。

根据情况,拥有一个CSS类.inline_block { display: inline-block; }并调用$(element).toggleClass('inline_block')可以为我解决问题。


2

您可以使用显示/隐藏的动画

像这样:

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

试试这个:

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

show()这个是没有意义的。这与$('#foo').css('display','inline-block');
Liam 2015年

@Liam不是没有意义的。您可以更改0来缓和,也可以对其进行修改以访问其他唯一show选项。
JSideris '16

2

我想您既要动画又要在最后设置display属性。在这种情况下,您最好使用show()回调,如下所示

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

这样,您将获得两个结果。


这是不正确的,inline-block只有在整个动画运行之后,您才能使用该模式。这意味着它将在400ms 之间blockinline-block之后“弹出” 。
亚历克西斯·威尔克

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

实际上,jQuery只是清除了“ display”属性的值,而没有将其设置为“ block”(请参阅​​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";
        }
    }

请注意,您可以覆盖$ .fn.show()/ $。fn.hide();。隐藏时将原始显示存储在元素本身中(例如,作为属性或在$ .data()中);然后在显示时再次应用回去。

另外,使用CSS 很重要!在这里可能行不通-因为设置样式内联通常比任何其他规则都强


0

最好的.let是父元素,display :inline-block或添加divCSS仅具有的父元素display :inline-block


-5

最好的方法是在选择器中添加!important后缀。

例:

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

3
这不是防止.hide()吗?
卡恩·索拉

!important仅在没有其他选择的情况下才是必需的。我认为当可以使用更好的jQuery代码修复该问题时,这不是解决此问题的正确方法。
布兰登

6
要记住的重要一点!important是,不要使用它很重要
user1728278 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.