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

@gijs 죄송합니다. 작동합니다. 캐시 문제가 있다고 생각합니다. 시간 내 주셔서 감사합니다
Giri

답변:


209

대신 showCSS를 사용하여 내용을 숨기고 표시해보십시오.

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
이것은 분명해 보이지만 show( $("#id").show(500)) 의 타이밍 측면을 계속 사용 하려면 css함수를 추가하십시오 .$("#id").show(500).css("display", "inline-block");
BenR

2
한 걸음 더 나아가 jQuery가 아닌 CSS 클래스를 사용하여 모든 숨기기 / 표시를 처리합니다. $('.tab-content').addClass('hidden'); (...) $('#' + id).removeClass('hidden'); CSS에서 :.hidden { display: none !important }
Joe Maffei

10
이것이 허용되는 대답이지만 jquery docs에 명시된 내용을 반영하지는 않습니다 . 이것은 display 속성이 처음에 복원 된 것을 제외하고는 .css ( "display", "block") 호출과 거의 같습니다. 요소에 표시 값이 인라인 인 경우 숨겨져 표시되면 다시 한 번 인라인으로 표시됩니다. 따라서 기본값 display을 가지려면 CSS에 클래스를 추가 한 display:inline-block;다음 요소의 ID 를 호출 hide()하고 사용해야합니다 show(). 이것은 더 깨끗하고 예측 가능한 코드이며 스타일링이 더 쉽습니다.
Abdullah Adeeb

1
@AbdullahAdeeb 문제는 hide()페이지로드시 js 가 필요로한다는 것 입니다. 설정 #element{display:inline-block;display:none;}하지 않습니다. CSS에서 $('#element').fadeIn().addClass('displaytype');다른 .displaytypes를 설정 하고 js에 하나의 기능을 표시 할 수 있기 때문에 가장 깨끗한 솔루션이 위의 답변보다 낫다고 생각합니다 . 내 답변보기 here : 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

9

다음과 같이 show () 또는 fadeIn () 바로 뒤에 css ()를 사용하십시오.

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

5

내가 그거 했어

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

매력처럼 작동합니다.


7
그게 답입니까, 아니면 인정입니까?
NREZ

5

Razz의 솔루션은 .hide()and .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

@Liam 무의미하지 않습니다. 쉽게 0을 변경하거나 다른 고유 show옵션에 액세스하도록 수정하십시오 .
JSideris 2016 년

2

애니메이션을 원하고 마지막에 디스플레이 속성을 설정한다고 생각합니다. 이 경우 show()아래 표시된 것처럼 콜백을 사용하는 것이 좋습니다.

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

이렇게하면 두 결과를 모두 얻을 수 있습니다.


이것은 정확하지 않습니다 inline-block. 전체 애니메이션이 실행 된 후에 만 ​​모드가 종료됩니다 . 즉 , 400ms 사이 blockinline-block이후에 "팝"할 것 입니다.
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

실제로 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

가장 좋은 것은 부모 display :inline-block이거나 divCSS 만 있는 부모를 추가하십시오 display :inline-block.


-5

가장 좋은 방법은 셀렉터에 중요한 접미사를 추가하는 것입니다.

예:

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

3
이것이 .hide ()를 막지 않습니까?
Kaan Soral

! 중요한 옵션은 다른 옵션이없는 경우에만 필요합니다. 더 나은 jQuery 코드로 해결할 수있을 때 내 의견으로는이 문제에 접근하는 올바른 방법은 아닙니다.
Brandon

6
중요한 에 대한 기억해야 할 것은 !important이 점입니다 중요한 그것을 사용하지.
user1728278
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.