Kaip patikrinti, ar elementas paslėptas jQuery?

Galite perjungti elementų matomumą naudodami .hide() , .show() arba .toggle() .

Kaip išbandytumėte, ar elementas yra matomas ar paslėptas?

6967
07 окт. Philip Morton paklausė 07 okt. 2008-10-07 16:03 '08 at 4:03 pm 2008-10-07 16:03
@ 56 atsakymai
  • 1
  • 2

Kadangi klausimas susijęs su vienu elementu, šis kodas gali būti tinkamesnis:

 // Checks css for display:[none|block], ignores visibility:[true|false] $(element).is(":visible"); // The same works with hidden $(element).is(":hidden"); 

Tas pats, kaip dvidešimt pasiūlymų , tačiau taikomas vieninteliam elementui; ir tai atitinka „JQuery“ DUK rekomenduojamą algoritmą

8594
07 окт. atsakymas pateikiamas Tsvetomir Tsonev 07 okt. 2008-10-07 16:30 '08, 16.30 val. 2008-10-07 16:30

Galite naudoti hidden valdiklį:

 // Matches all elements that are hidden $('element:hidden') 
border=0

Ir visible selektorius:

 // Matches all elements that are visible $('element:visible') 
1318
07 окт. atsakymas duotas twernt 07 spalis 2008-10-07 16:16 '08, 16:16 pm 2008-10-07 16:16
 if ( $(element).css('display') == 'none' || $(element).css("visibility") == "hidden"){ // element is hidden } 

Pirmiau minėtas metodas neatsižvelgia į tėvų matomumą. Jei norite peržiūrėti tėvą, turite naudoti .is(":hidden") arba .is(":visible") .

Pavyzdžiui

 <div id="div1" style="display:none"> <div id="div2" style="display:block">Div2</div> </div> 

Anksčiau aprašytas metodas div2 matomą, o :visible ne. Tačiau daugeliu atvejų tai gali būti naudinga, ypač kai reikia sužinoti, ar paslėptame pagrindiniame elemente yra matomų div klaidų, nes šiomis sąlygomis :visible neveiks.

831
07 окт. atsakymas Mote Oct 07. 2008-10-07 16:09 '08 at 4:09 pm 2008-10-07 16:09

Nė vienas iš šių atsakymų nesusijęs su tuo, ką aš suprantu, ir tai yra klausimas, kurį ieškojau: „Kaip apdoroti elementus su visibility: hidden ?“. Nei :visible , nei :hidden nebus, nes jie abu ieško kartografavimo dokumentacijoje. Kiek galiu pasakyti, nėra CSS matomumo valdiklio. Štai kaip tai išsprendžiau (standartiniai jQuery pasirinktuvai, galbūt glaustesnė sintaksė):

 $(".item").each(function() { if ($(this).css("visibility") == "hidden") { // handle non visible state } else { // handle visible state } }); 
474
24 марта '11 в 21:44 2011-03-24 21:44 atsakymą pateikė „ aaronLile“ kovo 24 d. 11 d. 21:44. 2011-03-24 21:44

Nuo Kaip nustatyti įjungto elemento būseną?


Galite nustatyti, ar elementas yra sukompiliuotas ar nenaudojamas :visible ir :hidden pasirinktuvai.

 var isVisible = $('#myDiv').is(':visible'); var isHidden = $('#myDiv').is(':hidden'); 

Jei paprasčiausiai veikia elementas, pagrįstas jo išvaizda, galite paprasčiausiai įtraukti :visible arba :hidden pasirinkimo raiškoje. Pavyzdžiui:

  $('#myDiv:visible').animate({left: '+=200px'}, 'slow'); 
343
14 янв. atsakymą pateikė user574889 14 sausis 2011-01-14 00:13 '11 prie 0:13 2011-01-14 00:13

Dažnai, patikrindami, ar kažkas yra matomas ar ne, tuoj pat eisite tiesiai į priekį ir darysite kitą su juo. JQuery grandinė palengvina.

Taigi, jei turite selektorių ir norite atlikti tam tikrą veiksmą, tik jei jis yra matomas ar paslėptas, galite naudoti filter(":visible") arba filter(":hidden") ir tada prijungti jį prie veiksmai, kurių norite imtis.

Taigi vietoj to, if , pavyzdžiui:

 if ($('#btnUpdate').is(":visible")) { $('#btnUpdate').animate({ width: "toggle" }); // Hide button } 

Arba efektyvesnė, bet dar bjauresnė:

 var button = $('#btnUpdate'); if (button.is(":visible")) { button.animate({ width: "toggle" }); // Hide button } 

Jūs galite tai padaryti vienoje eilutėje:

 $('#btnUpdate').filter(":visible").animate({ width: "toggle" }); 
253
25 июля '09 в 13:21 2009-07-25 13:21 atsakymas pateikiamas Simon_Weaver liepos 25 d., 09:21 , 2009-07-25 13:21

Selektorius :visible pagal jQuery dokumentus :

  • Jie neturi CSS vertės.
  • Tai yra formos elementai, kurių type="hidden" .
  • Jų plotis ir aukštis aiškiai nustatomi į 0.
  • Pirminis elementas yra paslėptas, todėl elementas puslapyje nerodomas.

Elementai su visibility: hidden arba opacity: 0 laikomi matomais, nes jie vis dar naudoja erdvę išdėstyme.

Tai naudinga kai kuriais atvejais ir nenaudinga kitiems, nes jei norite patikrinti, ar elementas yra matomas ( display != none ), ignoruodamas pagrindinių elementų matomumą, rasite, kad vykdant .css("display") == 'none' atsiranda ne tik greičiau, bet ir grąžina matomumo teisingumą.

Jei norite matyti matomumą vietoj ekrano, turėtumėte naudoti: .css("visibility") == "hidden" .

Taip pat atkreipkite dėmesį į papildomas „jQuery“ pastabas :

Kadangi :visible yra jQuery išplėtimas, o ne CSS specifikacijos dalis, užklausos naudojant :visible negali pasinaudoti efektyvumo patobulinimais, querySelectorAll() naudojant integruotą DOM querySelectorAll() metodą. Norint pasiekti geriausius rezultatus, kai naudojate :visible pasirinkti elementai, pirmiausia pasirinkite elementus naudodami gryną CSS selektorių, tada naudokite .filter(":visible") .

Be to, jei nerimaujate dėl veiklos, turėtumėte patikrinti, ar matote mane ... rodyti / slėpti našumą (2010-05-04) ir naudoti kitus metodus elementų rodymui ir slėpimui.

206
25 нояб. Atsakymą pateikė Pedro Rainho lapkričio 25 d. 2011-11-25 12:16 '11, 12:16, 2011-11-25 12:16

Jis veikia man, ir naudoju show() ir hide() , kad mano paslėptas / matomas:

 if( $(this).css('display') == 'none' ){  } else {  } 
187
06 июля '11 в 23:19 2011-07-06 23:19 atsakymą pateikė „ Abiy“ liepos 06 d. 11 d. 23:19. 2011-07-06 23:19

Kaip elementų matomumas ir jQuery veikia

Elementas gali būti paslėptas naudojant display:none , visibility:hidden arba opacity:0 . Skirtumas tarp šių metodų:

  • display:none neslepia elemento ir neturi jokios vietos;
  • visibility:hidden slepia, tačiau jis vis tiek užima vietos išdėstyme;
  • opacity:0 paslėpia elementą kaip „matomą: paslėptą“, ir jis vis tiek užima vietos išdėstyme; vienintelis skirtumas yra tas, kad neskaidrumas leidžia elementui iš dalies skaidrią;

     if ($('.target').is(':hidden')) { $('.target').show(); } else { $('.target').hide(); } if ($('.target').is(':visible')) { $('.target').hide(); } else { $('.target').show(); } if ($('.target-visibility').css('visibility') == 'hidden') { $('.target-visibility').css({ visibility: "visible", display: "" }); } else { $('.target-visibility').css({ visibility: "hidden", display: "" }); } if ($('.target-visibility').css('opacity') == "0") { $('.target-visibility').css({ opacity: "1", display: "" }); } else { $('.target-visibility').css({ opacity: "0", display: "" }); } 

    Naudingi jQuery jungiklio metodai:

     $('.click').click(function() { $('.target').toggle(); }); $('.click').click(function() { $('.target').slideToggle(); }); $('.click').click(function() { $('.target').fadeToggle(); }); 
181
25 апр. atsakymą pateikė webvitaly balandžio 25 d 2012-04-25 00:04 '12 12:04 AM 2012-04-25 00:04

Norėčiau naudoti CSS klasę .hide { display: none!important; } .hide { display: none!important; } .

Norėdami paslėpti / parodyti, aš vadinu .addClass("hide")/.removeClass("hide") . Norėdami patikrinti matomumą, naudoju .hasClass("hide") .

Tai paprastas ir paprastas būdas patikrinti / paslėpti / rodyti elementus, jei nenorite naudoti metodų .toggle() arba .animate() .

145
03 февр. atsakymas, kurį pateikė Evgeny Levin 03 vasaris 2012-02-03 19:04 '12 19:04 2012-02-03 19:04

Taip pat galite tai padaryti naudodami paprastą javascript:

 function isRendered(domObj) { if ((domObj.nodeType != 1) || (domObj == document.body)) { return true; } if (domObj.currentStyle  domObj.currentStyle["display"] != "none"  domObj.currentStyle["visibility"] != "hidden") { return isRendered(domObj.parentNode); } else if (window.getComputedStyle) { var cs = document.defaultView.getComputedStyle(domObj, null); if (cs.getPropertyValue("display") != "none"  cs.getPropertyValue("visibility") != "hidden") { return isRendered(domObj.parentNode); } } return false; } 

Pastabos:

  • Dirba visur

  • Darbai įdėtiems elementams

  • Veikia CSS ir inline stiliams.

  • Nereikalaujama jokios sistemos

140
16 июля '12 в 22:18 2012-07-16 22:18 atsakymą pateikė Mattas Brockas liepos 16, 12 d., 10:18 pm 2012-07-16 22:18

Galite tiesiog naudoti hidden arba visible atributą, pavyzdžiui:

 $('element:hidden') $('element:visible') 

Arba galite supaprastinti tą patį su toliau pateiktais.

 $(element).is(":visible") 
120
23 мая '12 в 15:59 2012-05-23 15:59 atsakymas pateikiamas ScoRpion gegužės 23 d., 12 val. 15.55 val. 2012-05-23 15:59

Kitas atsakymas, į kurį reikia atsižvelgti: jei paslėpsite elementą, turėtumėte naudoti jQuery , bet vietoj to paslėpti ištrinate visą elementą, bet kopijuojate jo HTML kodą ir žymą į jQuery kintamąjį, tada jums reikia atlikti bandymą, jei ekrane yra toks žyma, naudojant įprastą, if (!$('#thetagname').length) .

110
22 апр. atsakymas pateiktas pagal nuomonę123 balandžio 22 d 2012-04-22 02:40 '12 ne 02:40 2012-04-22 02:40

Demo nuoroda

Šaltinis:

„Blogger Plug n Play“ - „jQuery“ įrankiai ir valdikliai: kaip sužinoti, ar elementas yra paslėptas ar matomas naudojant „jQuery“

105
25 янв. Atsakymas yra kodas Spy 25 sausis 2013-01-25 08:34 '13, 8:34, 2013-01-25 08:34

ebdiv turėtų būti nustatytas kaip style="display:none;" Tai veikia rodant ir slepiant:

 $(document).ready(function(){ $("#eb").click(function(){ $("#ebdiv").toggle(); }); }); 
103
13 июня '12 в 16:20 2012-06-13 16:20 atsakymą pateikė Vaishu birželio 13 d. 12 val. 20.00 val. 2012-06-13 16:20

Bandant elementą, turintį „ :hidden “ jQuery selektorių, reikia atsižvelgti į tai, kad elementas su absoliučia vieta gali būti atpažintas kaip paslėptas, nors jų vaiko elementai yra matomi .

Iš pradžių tai atrodo šiek tiek priešinga - nors atidžiau pažvelgus į „jQuery“ dokumentus, pateikiama svarbi informacija:

Elementai gali būti laikomi paslėptais dėl kelių priežasčių: [...] Jų plotis ir aukštis aiškiai nustatomi į 0. [...]

Taigi, iš tikrųjų yra prasminga elemento modelis ir apskaičiuotas elemento stilius. Net jei plotis ir aukštis nėra aiškiai nustatyti 0, jie gali būti nustatyti netiesiogiai.

Pažvelkite į šį pavyzdį:

 .foo { position: absolute; left: 10px; top: 10px; background: #ff0000; } .bar { position: absolute; left: 10px; top: 10px; width: 20px; height: 20px; background: #0000ff; } 
http://jsfiddle.net/pM2q3/7/ 

Ta pati JS turės šią produkciją:

 console.log($('.foo').is(':hidden')); // false console.log($('.bar').is(':hidden')); // false 
85
06 мая '14 в 13:50 2014-05-06 13:50 atsakymas pateikiamas koncepcinis prabangus gegužės 06 d. 14, 13:50 2014-05-06 13:50

Jis gali veikti:

 expect($("#message_div").css("display")).toBe("none"); 
82
20 июля '12 в 15:44 2012-07-20 15:44 atsakymą pateikė Maneesas Kumaras liepos 20 d., 12 val. 15:44 2012-07-20 15:44

Pavyzdys:

 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="checkme" class="product" style="display:none"> <span class="itemlist"><!-- Shows Results for Fish --></span> Category:Fish <br>Product: Salmon Atlantic <br>Specie: Salmo salar <br>Form: Steaks </div> 
62
28 окт. atsakymą pateikė Irfanas DANISH spalis 28 2013-10-28 09:43 '13, 9:43, 2013-10-28 09:43

Norėdami patikrinti, ar tai nėra matoma, naudoju ! :

 if ( !$('#book').is(':visible')) { alert('#book is not visible') } 

Arba taip: sam, laikydami jQuery selektorių kintamajame, kad galėtumėte geriau veikti, kai jums to reikia kelis kartus:

 var $book = $('#book') if(!$book.is(':visible')) { alert('#book is not visible') } 
61
04 июня '13 в 16:42 2013-06-04 16:42 atsakymą pateikė Matthias Wegtun , birželio 4 d. 13 d., 4:42 2013-06-04 16:42

Naudokite klasės perjungimą, o ne stiliaus redagavimą.,.

Klasių, skirtų elementams „paslėpti“, naudojimas yra paprastas ir vienas iš efektyviausių metodų. Klasės „paslėptas“ perjungimas su „ Display “ tipo Display bus greitesnis nei redaguoti šį stilių. Aš išsamiai paaiškinau kai kuriuos iš šių klausimų dėl dviejų elementų, matomų / paslėptų tame pačiame divizione , pasukimo .


„JavaScript“ rekomendacijos ir optimizavimas

Čia yra tikrai pamokantis „Google“ technikos pokalbio „Google“ technikos specialistas Nicholas Zakas vaizdo įrašas:

59
19 июля '13 в 0:17 2013-07-19 00:17 atsakymas pateikiamas Lopsided liepos 19 d., 13 val. 0:17 2013-07-19 00:17

Skelbimo rinkinio matomo patikrinimo pavyzdys:

 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="ad-placement" id="ablockercheck"></div> <div id="ablockermsg" style="display: none"></div> 

„ablockercheck“ yra identifikatorius, blokuojantis bloką. Todėl patikrindami tai, jei jis matomas, galite nustatyti, ar skelbimų rinkinys yra įjungtas.

55
27 апр. atsakymas pateikiamas Roman Losev 27 balandžio. 2015-04-27 10:57 '15, 10:57 2015-04-27 10:57

Galų gale, nė vienas iš pavyzdžių man netinka, todėl parašiau savo.

Bandymai (be „Internet Explorer“ palaikymo filter:alpha ):

a) Patikrinkite, ar dokumentas yra paslėptas

b) Patikrinkite, ar elementas turi nulinį plotį / aukštį / neskaidrumą ar display:none / visibility:hidden integruotuose stiliuose.

c) Įsitikinkite, kad centras (taip pat ir dėl to, kad jis yra greitesnis už kiekvieno elemento pikselio / kampo bandymą) nėra paslėptas kito elemento (ir visų protėvių, pvz., overflow:hidden / slinkimo / vieno elemento per enother) arba krašto ekrano

d) Patikrinkite, ar elementas turi nulinį plotį / aukštį / neskaidrumą ar display:none / matomumas: paslėptas skaičiuotuose stiliuose (tarp visų protėvių)

Išbandyta

„Android“ 4.4 (savo naršyklė / „Chrome“ / „Firefox“), „Firefox“ („Windows“ / „Mac“), „Chrome“ („Windows“ / „Mac“), „Opera“ („Windows Presto / Mac Webkit“), „Internet Explorer“ („Internet Explorer 5-11“ režimai + „Internet Explorer 8“ virtualioje mašinoje ), „Safari“ („Windows“ / „Mac“ / „iOS“)

 var is_visible = (function () { var x = window.pageXOffset ? window.pageXOffset + window.innerWidth - 1 : 0, y = window.pageYOffset ? window.pageYOffset + window.innerHeight - 1 : 0, relative = !!((!x  !y) || !document.elementFromPoint(x, y)); function inside(child, parent) { while(child){ if (child === parent) return true; child = child.parentNode; } return false; }; return function (elem) { if ( document.hidden || elem.offsetWidth==0 || elem.offsetHeight==0 || elem.style.visibility=='hidden' || elem.style.display=='none' || elem.style.opacity===0 ) return false; var rect = elem.getBoundingClientRect(); if (relative) { if (!inside(document.elementFromPoint(rect.left + elem.offsetWidth/2, rect.top + elem.offsetHeight/2),elem)) return false; } else if ( !inside(document.elementFromPoint(rect.left + elem.offsetWidth/2 + window.pageXOffset, rect.top + elem.offsetHeight/2 + window.pageYOffset), elem) || ( rect.top + elem.offsetHeight/2 < 0 || rect.left + elem.offsetWidth/2 < 0 || rect.bottom - elem.offsetHeight/2 > (window.innerHeight || document.documentElement.clientHeight) || rect.right - elem.offsetWidth/2 > (window.innerWidth || document.documentElement.clientWidth) ) ) return false; if (window.getComputedStyle || elem.currentStyle) { var el = elem, comp = null; while (el) { if (el === document) {break;} else if(!el.parentNode) return false; comp = window.getComputedStyle ? window.getComputedStyle(el, null) : el.currentStyle; if (comp  (comp.visibility=='hidden' || comp.display == 'none' || (typeof comp.opacity !=='undefined'  comp.opacity != 1))) return false; el = el.parentNode; } } return true; } })(); 

Kaip naudoti:

 is_visible(elem) // boolean 
55
09 апр. atsakymas pateikiamas Aleko 09 balandžio. 2014-04-09 20:06 '14, 20:06, 2014-04-09 20:06

Turite patikrinti tiek ... Ekranas, ir matomumas:

 if ($(this).css("display") == "none" || $(this).css("visibility") == "hidden") { // The element is not visible } else { // The element is visible } 

Jei mes patikrinsime $(this).is(":visible") , jQuery automatiškai tikrina abu dalykus.

50
31 янв. atsakymą Premshankar Tiwari pateikė sausio 31 d 2014-01-31 09:24 '14, 2014-09-31 09:24

Galbūt jūs galite tai padaryti.

 <script src="https://code.jquery.com/jquery-1.10.2.js"></script> <input type="text" id="tElement" style="display:block;">Firstname</input> 
38
07 апр. Mathias Stavrou atsakymas 07 Bal 2015-04-07 15:26 '15 15:26 2015-04-07 15:26

Kadangi Elements with visibility: hidden or opacity: 0 are considered visible, since they still consume space in the layout (kaip aprašyta jQuery: matomas selektorius ), galime patikrinti, ar elementas yra matomas tokiu būdu:

 function isElementReallyHidden (el) { return $(el).is(":hidden") || $(el).css("visibility") == "hidden" || $(el).css('opacity') == 0; } var booElementReallyShowed = !isElementReallyHidden(someEl); $(someEl).parents().each(function () { if (isElementReallyHidden(this)) { booElementReallyShowed = false; } }); 
32
19 марта '14 в 15:42 2014-03-19 15:42 atsakymą pateikė Andronas kovo 19 d., 14 d., 15:42 2014-03-19 15:42
 if($('#postcode_div').is(':visible')) { if($('#postcode_text').val()=='') { $('#spanPost').text('\u00a0'); } else { $('#spanPost').text($('#postcode_text').val()); } 
30
15 нояб. atsakymą pateikė „ Gaurav“ lapkričio 15 d. 2013-11-15 13:41 '13 13:41 2013-11-15 13:41

Bet kas, jei CSS elementas atrodo taip?

 .element{ position: absolute;left:-9999; } 

Taigi tai yra atsakymas į kamino perpildymo klausimą. Taip pat reikėtų atsižvelgti į tai, kaip patikrinti, ar elementas yra išjungtas .

30
23 авг. atsakymą pateikė RN Kushwaha 23 rug . 2014-08-23 23:53 '14, 23:53, 2014-08-23 23:53

Tiesiog patikrinkite matomumą, patikrindami loginę vertę, pavyzdžiui:

 if (this.hidden === false) { // Your code } 

Aš naudoju šį kodą kiekvienai funkcijai. Priešingu atveju, galite naudoti elementą is(':visible') kad patikrintumėte elemento matomumą.

30
11 авг. atsakymas pateikiamas pixellabme 11 rug . 2014-08-11 08:28 '14 at 8:28 2014-08-11 08:28

Galima sukurti funkciją, kad būtų galima patikrinti matomumo / ekrano atributus, kad nustatytų, ar elementas rodomas vartotojo sąsajoje.

 function checkUIElementVisible(element) { return ((element.css('display') !== 'none')  (element.css('visibility') !== 'hidden')); } 

Darbo scenarijus

29
29 авг. atsakymas pateikiamas V31 29 rug. 2014-08-29 23:20 '14, 23:20 2014-08-29 23:20

Taip pat yra trijų komponentų sąlyginė išraiška elemento būsenai patikrinti ir tada:

 $('someElement').on('click', function(){ $('elementToToggle').is(':visible') ? $('elementToToggle').hide('slow') : $('elementToToggle').show('slow'); }); 
29
06 нояб. atsakymas, kurį pateikė cssimsek 2013-11-06 02:32 '13, 2:32 2013-11-06 02:32
  • 1
  • 2

Kiti klausimai apie „ etiketes arba Užduoti klausimą