เทียบเท่ากับ jQuery .hide () เพื่อตั้งค่าการเปิดเผย: ซ่อน


340

ใน jQuery มี.hide()และ.show()วิธีการที่ตั้งdisplay: noneค่าการตั้งค่าCSS

มีฟังก์ชั่นเทียบเท่าที่จะตั้งvisibility: hiddenค่าหรือไม่

ฉันรู้ว่าฉันสามารถใช้.css()แต่ฉันชอบฟังก์ชั่นบางอย่างเช่น.hide()หรือดังนั้น ขอบคุณ


2
คุณสามารถใช้งานของคุณเองตาม.toggle()
zerkms

ฉันยังเป็นแฟนตัวยงของวิธี toggleClass () ของ jQuery :) jqueryui.com/toggleClass โปรดลองดูตัวอย่างที่ฉันแชร์ในคำตอบของฉันด้านล่างstackoverflow.com/a/14632687/1056713
Chaya Cooper

คำตอบ:


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 ถึงคำตอบของ alex!
James Allardice

เพียงแค่อยากรู้อยากเห็นจุดในการห่อฟังก์ชั่นทั้งสองนี้ใน(function($) {...}(jQuery));กระดาษห่อคืออะไร? ฉันไม่เคยกำหนดฟังก์ชั่นของตัวเองใน jQuery มาก่อนฉันได้กำหนดฟังก์ชั่นเป็น JavaScript แบบตรงเสมอ
VoidKing

2
@VoidKing - เป็นเพียง "วิธีปฏิบัติที่ดีที่สุด" สำหรับปลั๊กอิน jQuery ตามเอกสาร อนุญาตให้คุณใช้$ตัวระบุภายในฟังก์ชันแม้ว่าจะอ้างถึงสิ่งอื่นในขอบเขตพาเรนต์
James Allardice

jQuery จริง ๆ แล้วมีวิธีการใน toggleClass () วิธีการนี้ :) jqueryui.com/toggleClass รู้สึกอิสระที่จะตรวจสอบตัวอย่างที่ฉันแบ่งปันในคำตอบของฉันด้านล่างstackoverflow.com/a/14632687/1056713
Chaya Cooper

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
ฉันชอบวิธีนี้ มันมีอยู่ในตัวเองน้อยลงเพราะต้องการสไตล์ชีทแยกต่างหาก แต่ช่วยเก็บข้อมูลสไตล์ทั้งหมดในสไตล์ชีตซึ่งเป็นที่ที่ควรเป็น หากคุณต้องการปิดการใช้งานการมองเห็นคุณสามารถเปลี่ยนแท็ก css ได้ในที่เดียวแทนที่จะเปลี่ยนรหัส js ทั้งหมดของคุณ
vaughan

19
สำหรับผู้ที่ใช้ bootstrap คลาสนี้เรียกว่าล่องหน
user239558

25

หากคุณต้องการเพียงฟังก์ชันการทำงานมาตรฐานของการซ่อนด้วยการมองเห็นเท่านั้น: ซ่อนเพื่อเก็บเค้าโครงปัจจุบันคุณสามารถใช้ฟังก์ชันการเรียกกลับของการซ่อนเพื่อแก้ไข 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

Pure JSเทียบเท่ากับ jQuery hide () / show ():

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

เราใช้return elเนื่องจากการตอบสนองอย่างราบรื่น "รูปแบบดีไซน์"

นี่เป็นตัวอย่างการทำงาน


ด้านล่างนี้ผมยังให้unrecommended ขอทางเลือกซึ่งมี แต่อาจจะมากกว่า "ใกล้กับคำถาม" คำตอบ:

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

แน่นอนว่านี่ไม่ใช่การใช้ jQuery 'แต่ละ' (ให้ไว้ใน@JamesAllardice answer) เพราะเราใช้ js บริสุทธิ์ที่นี่

ตัวอย่างการทำงานเป็นที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.