가시성을 설정하는 jQuery .hide ()와 동일 : hidden


340

jQuery를에가 .hide().show()는 CSS 설정 방법 display: none설정.

visibility: hidden설정을 설정 하는 동등한 기능이 있습니까?

사용할 수는 .css()있지만 어떤 기능은 선호합니다 .hide(). 감사.


2
다음을 기반으로 직접 구현할 수 있습니다..toggle()
zerkms

나는 또한 jQuery의 toggleClass ()이 :)위한 방법의 팬이에요 jqueryui.com/toggleClass 내가 내 대답은 아래에 공유 예를 체크 아웃 느낌 무료 stackoverflow.com/a/14632687/1056713을
차야 쿠퍼

답변:


426

당신은 당신의 자신의 플러그인을 만들 수 있습니다.

jQuery.fn.visible = function() {
    return this.css('visibility', 'visible');
};

jQuery.fn.invisible = function() {
    return this.css('visibility', 'hidden');
};

jQuery.fn.visibilityToggle = function() {
    return this.css('visibility', function(i, visibility) {
        return (visibility == 'visible') ? 'hidden' : 'visible';
    });
};

원래 jQuery를 오버로드하려면 toggle()권장하지 않습니다 ...

!(function($) {
    var toggle = $.fn.toggle;
    $.fn.toggle = function() {
        var args = $.makeArray(arguments),
            lastArg = args.pop();

        if (lastArg == 'visibility') {
            return this.visibilityToggle();
        }

        return toggle.apply(this, arguments);
    };
})(jQuery);

jsFiddle .


@Tomas toggle()다른 스크립트를 손상시킬 수있는 그림자 를 만들어야 합니다. 당신이 원하는 경우에 추가 인수를 추가 할 수 toggle()있는지 여부를 지정 visibility또는 display전환되어야한다. 그러나 마지막 예제에서는 사용자 지정을 사용합니다. :)
alex

show(속도, 여유, 콜백) 의 추가 매개 변수를 지원하는 방법에 대한 예를 게시 할 수 있습니까?
georg

11
그렇게 보면 슈퍼 플로 러스이지만 목적이 있습니다. 이것이 (function() { })()또는 유사한 스크립트를 가진 다른 스크립트에 연결 되면 ASI는 함수 호출처럼 보이기 때문에 시작되지 않습니다. 이것을 시도한 다음를 제거하십시오 !.
alex

1
@NoBugs 자동 세미콜론 삽입. 여기에 블로그 글을 썼습니다 .
alex

1
@VishalSakaria 그것은 내가 아는 한 잘 정의 된 용어가 아니므로 여기서 사용하는 것이 좋습니다.
alex

103

내장되어 있지 않지만 자신만의 것을 쉽게 작성할 수 있습니다.

(function($) {
    $.fn.invisible = function() {
        return this.each(function() {
            $(this).css("visibility", "hidden");
        });
    };
    $.fn.visible = function() {
        return this.each(function() {
            $(this).css("visibility", "visible");
        });
    };
}(jQuery));

그런 다음 이렇게 호출 할 수 있습니다.

$("#someElem").invisible();
$("#someOther").visible();

다음은 실제 예제 입니다.


1
좋은 지적, 습관의 힘. 감사. 알렉스의 대답에 +1!
James Allardice

궁금한 점이 있다면,이 두 함수를 (function($) {...}(jQuery));래퍼 로 감싸는 요점이 무엇 입니까? 나는 jQuery에서 내 자신의 함수를 정의한 적이 없으며 항상 JavaScript로 함수를 정의했습니다.
VoidKing

2
@VoidKing-문서에 따라 jQuery 플러그인에 대한 "모범 사례"입니다. $상위 범위의 다른 항목을 참조하더라도 함수 내 에서 식별자 를 사용할 수 있습니다 .
James Allardice

jQuery를 실제로는 toggleClass ()이 대한 방법을 내장하고있다 :) jqueryui.com/toggleClass 내가 내 대답은 아래에 공유 예를 체크 아웃 느낌 무료 stackoverflow.com/a/14632687/1056713
차야 쿠퍼

55

더 간단한 방법은 jQuery의 toggleClass () 메소드 를 사용 하는 것입니다.

CSS

.newClass{visibility: hidden}

HTML

<a href="#" class=trigger>Trigger Element </a>
<div class="hidden_element">Some Content</div>

JS

$(document).ready(function(){
    $(".trigger").click(function(){
        $(".hidden_element").toggleClass("newClass");
    });
});

1
나는이 접근법을 좋아한다. 별도의 스타일 시트가 필요하기 때문에 독립적이지 않지만, 스타일 시트에 모든 스타일 정보를 유지하는 데 도움이됩니다. 가시성을 비활성화하려면 모든 js 코드를 변경하는 대신 한곳에서 CSS 태그를 변경할 수 있습니다.
vaughan

19
부트 스트랩을 사용하는 사람들을 위해이 클래스는 보이지 않는 것으로 불립니다.
user239558

25

현재 레이아웃을 유지하기 위해 visible : hidden을 사용하여 hide의 표준 기능 만 필요한 경우 hide의 콜백 함수를 사용하여 태그의 CSS를 변경할 수 있습니다. jquery에서 문서 숨기기

예 :

$('#subs_selection_box').fadeOut('slow', function() {
      $(this).css({"visibility":"hidden"});
      $(this).css({"display":"block"});
});

이것은 일반적인 멋진 애니메이션을 사용하여 div를 숨기지 만 애니메이션이 끝나면 가시성을 숨김으로 설정하고 표시를 차단합니다.

예 : http://jsfiddle.net/bTkKG/1/

$ ( "# aa"). css () 솔루션을 원하지 않았지만 css () 메서드 만 사용하여 애니메이션을 잃어 버렸기 때문에 지정하지 않았습니다.


2

다음은 하나의 구현으로 작동 $.prop(name[,value])하거나 $.attr(name[,value])기능하는 것입니다. 경우 b변수가 작성되고, 가시성이에 따라 설정되고, this그렇지 않으면 가시성 값을 반환 (다른 속성을 계속 할 수 있도록) 반환됩니다.

jQuery.fn.visible = function (b) {
    if(b === undefined)
        return this.css('visibility')=="visible";
    else {
        this.css('visibility', b? 'visible' : 'hidden');
        return this;
    }
}

예:

$("#result").visible(true).on('click',someFunction);
if($("#result").visible())
    do_something;

1

jQuery hide () / show ()와 동등한 순수 JS :

function hide(el) {
    el.style.visibility = 'hidden';    
    return el;
}

function show(el) {
    el.style.visibility = 'visible';    
    return el;
}

hide(document.querySelector(".test"));
// hide($('.test')[0])   // usage with jQuery

유창한 인터페이스 "desing pattern" return el을 만족시키기 위해 사용 합니다.

다음은 실제 예제 입니다.


아래에서는 또한 매우 권장되지 않는 대안을 제공 하지만 아마도 "질문에 더 가까운"대답 일 것입니다.

HTMLElement.prototype.hide = function() {
    this.style.visibility = 'hidden';  
    return this;
}

HTMLElement.prototype.show = function() {
    this.style.visibility = 'visible';  
    return this;
}

document.querySelector(".test1").hide();
// $('.test1')[0].hide();   // usage with jQuery

물론 이것은 순수한 js를 사용하기 때문에 jQuery 'each'( @ JamesAllardice 답변으로 제공)를 구현하지 않습니다 .

실제 예제는 여기에 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.