JavaScript 숨기기 / 표시 요소


288

'편집'링크를 누르면 어떻게 숨길 수 있습니까? 편집을 누를 때 "lorem ipsum"텍스트를 숨길 수 있습니까?

<script type="text/javascript">
function showStuff(id) {
  document.getElementById(id).style.display = 'block';
}
</script>


<td class="post">

  <a href="#" onclick="showStuff('answer1'); return false;">Edit</a>
  <span id="answer1" style="display: none;">
    <textarea rows="10" cols="115"></textarea>
  </span>

  Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum 
</td>

답변:


455

function showStuff(id, text, btn) {
    document.getElementById(id).style.display = 'block';
    // hide the lorem ipsum text
    document.getElementById(text).style.display = 'none';
    // hide the link
    btn.style.display = 'none';
}
<td class="post">

<a href="#" onclick="showStuff('answer1', 'text1', this); return false;">Edit</a>
<span id="answer1" style="display: none;">
<textarea rows="10" cols="115"></textarea>
</span>

<span id="text1">Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum</span>
</td>


5
왜 추가합니까 return false에서 onclick?
Midas


1
예, 알아요 그러나 #을 링크로 사용하는 경우 필요하지 않기 때문에 궁금합니다.
Midas

10
JavaScript가 URL을 yourdomain.com/에서 yourdomain.com/#으로 변경하지 못하게하려면 필요할 수 있습니다. 또한, 창의 스크롤이 이동하거나 고려되지 않은 다른 문제가 발생할 수 있습니다.
Sascha Galley

1
테스트 할 수있는 링크가 없습니다. konzertagentur-koerner.de/test 그러나 좋은 코드에 감사드립니다
Timo

69

이 코드를 사용하여 요소를 표시하거나 숨길 수도 있습니다.

document.getElementById(id).style.visibility = "hidden";
document.getElementById(id).style.visibility = "visible";

참고 : display : none과 달리 visible : hidden을 사용할 때 style.visibility와 차이점 style.display은 태그는 표시되지 않지만 페이지에 공간이 할당 된 것입니다. 태그는 렌더링되며 페이지에는 표시되지 않습니다.

차이점을 보려면 이 링크 를 참조하십시오.


1
무엇에 대해 .hidden? 이제 어떻게 동작합니까?
jimasun

41

JQuery 옵션 을 제안하고 싶습니다 .

$("#item").toggle();
$("#item").hide();
$("#item").show();

예를 들면 다음과 같습니다.

$(document).ready(function(){
   $("#item").click(function(event){
     //Your actions here
   });
 });

60
때로는 JQuery가 필요하지 않습니다. 이것이 페이지에서해야 할 유일한 일이라면 라이브러리를로드하는 오버 헤드가 간결한 JavaScript를 작성 해야하는 것보다 훨씬 큽니다.
GlennG

2
애디 오스 마니 여기 설명대로, 그 숨기기 ()와 일반적으로 JQuery와 가시성 방법되어 있지 성능면에서 좋은 옵션을 것 같다 speakerdeck.com/addyosmani/devtools-state-of-the-union-2015
에밀리오

1
저자가 jQuery를 사용하지 않으므로 작동 할 수 있으므로 질문에 대한 관련 답변처럼 보이지 않습니다.
A. Wentzel

36

나는 다른 사람들이 제안한대로 요소를 숨기라고 제안합니다.

document.getElementById(id).style.display = 'none';

그러나 요소를 표시하려면 display = 'block'대신이를 제안합니다.

document.getElementById(id).style.display = '';

그 이유는 display = 'block'을 사용하면 작업중 인 페이지의 IE (11) 및 Chrome (버전 43.0.2357.130 m) 모두에서 표시되는 요소 옆에 추가 여백 / 공백이 발생하기 때문입니다.

Chrome에서 페이지를 처음로드하면 스타일 속성이없는 요소가 DOM 관리자에 다음과 같이 나타납니다.

element.style {
}

표준 JavaScript를 사용하여 숨기면 예상대로 다음과 같이됩니다.

element.style {
  display: none;
}

display = 'block'을 사용하여 다시 표시하면 다음과 같이 변경됩니다.

element.style {
  display: block;
}

원래와 동일하지 않습니다. 이것은 대부분의 경우에 큰 차이를 만들 수 없었습니다. 그러나 어떤 경우에는 이상을 유발합니다.

display = ''을 사용하면 DOM 관리자에서 원래 상태로 복원되므로 더 나은 접근 방식처럼 보입니다.


네! block옵션을 사용하지 않는 것이 좋습니다 . 이 prop의 기본값이 무엇인지 궁금합니다 : p

18

요소의 숨겨진 속성을 사용할 수 있습니다.

document.getElementById("test").hidden=true;
document.getElementById("test").hidden=false

아! 내가 이것을 좋아하는 이유는 display=""요즘 다른 값을 가질 수 있기 때문 입니다.
Andrew

불행히도 CSS 스타일 시트에서는 이것을 사용할 수 없습니다. 따라서 HTML에서 설정하거나 사용법을 결합해야합니다 display: none;.
Andrew

주의 사항 :이 속성은 CSS display속성이 설정된 경우 무시됩니다 .
JasonWoof

1
display속성이 없을 때 속성을 요소 로 설정하려면 hidden다음과 같이 타겟팅하십시오..my-el:not([hidden]) { display: flex }
gitaarik

13

행동에 대한 JS와 시각적 사탕에 대한 CSS를 가능한 많이 생각해야합니다. HTML을 약간 변경하면 :

<td class="post">
    <a class="p-edit-btn" href="#" onclick="showStuff(this.parentNode);return false;">Edit</a>
    <span id="answer1" class="post-answer">
       <textarea rows="10" cols="115"></textarea>
    </span>
    <span class="post-text" id="text1">Lorem ipsum ... </span>
</td>

CSS 규칙을 사용하여 한보기에서 다른보기로 전환 할 수 있습니다.

td.post-editing > a.post-edit-btn,
td.post-editing > span.post-text,
td.post > span.post-answer
{
    display : none;
}

그리고 두 클래스 사이를 전환하는 JS 코드

<script type="text/javascript">
function showStuff(aPostTd) {
    aPostTd.className="post-editing";
}
</script>

9

이 질문에 대해 여러 차례 답변을했지만 향후 사용자를 위해보다 완전하고 확실한 답변을 추가 할 것이라고 생각했습니다. 주요 대답은 문제를 해결하지만 물건을 표시하거나 숨기는 다양한 방법 중 일부를 알고 이해하는 것이 좋습니다.

.

css ()를 사용하여 표시 변경

이것이 내가 다른 방법을 찾을 때까지 내가했던 방식입니다.

자바 스크립트 :

$("#element_to_hide").css("display", "none");  // To hide
$("#element_to_hide").css("display", "");  // To unhide

장점 :

  • 숨기고 숨기기를 해제합니다. 그게 다야.

단점 :

  • 다른 것에 "display"속성을 사용하는 경우 숨기 전에 값을 하드 코딩해야합니다. 따라서 "인라인"이있는 $("#element_to_hid").css("display", "inline");경우 기본적으로 "차단"또는 강제로 적용되는 다른 항목으로 돌아갑니다.
  • 오타 자체를 빌려줍니다.

예 : https://jsfiddle.net/4chd6e5r/1/

.

addClass () / removeClass ()를 사용하여 표시 변경

이 예제를 설정하는 동안 실제로이 방법에 매우 결함이있는 몇 가지 결함이 발생했습니다.

CSS / 자바 스크립트 :

.hidden {display:none}
$("#element_to_hide").addClass("hidden");  // To hide
$("#element_to_hide").removeClass("hidden");  // To unhide

장점 :

  • 때때로 숨 깁니다. 예제에서 p1을 참조하십시오.
  • 숨기기를 해제하면 이전 표시 값을 사용하여 다시 돌아옵니다. 예제에서 p1을 참조하십시오.
  • 모든 숨겨진 개체를 가져 오려면해야합니다 $(".hidden").

단점 :

  • 표시 값이 html에 직접 설정된 경우 숨기지 않습니다. 예제에서 p2를 참조하십시오.
  • 디스플레이가 css ()를 사용하여 자바 스크립트로 설정된 경우 숨기지 않습니다. 예제에서 p3을 참조하십시오.
  • CSS 속성을 정의해야하므로 코드가 약간 더 많습니다.

예 : https://jsfiddle.net/476oha8t/8/

.

toggle ()을 사용하여 표시 변경

자바 스크립트 :

$("element_to_hide").toggle();  // To hide and to unhide

장점 :

  • 항상 작동합니다.
  • 전환 이전의 상태에 대해 걱정할 필요가 없습니다. 이것에 대한 명백한 사용은 토글 버튼입니다.
  • 짧고 간단합니다.

단점 :

  • 직접 관련이없는 작업을 수행하기 위해 전환중인 상태를 알아야하는 경우 상태를 확인하려면 더 많은 코드 (if 문)를 추가해야합니다.
  • 이전의 단점과 비슷하게 숨길 목적으로 toggle ()이 포함 된 명령 집합을 실행하려고하지만 숨겨져 있는지 알 수없는 경우 검사 (if 문)를 추가해야합니다. 먼저 찾아서 이미 숨겨져 있다면 건너 뛰십시오. 예제의 p1을 참조하십시오.
  • 앞의 두 가지 단점과 관련하여 구체적으로 숨기거나 구체적으로 표시하는 것에 대해 toggle ()을 사용하면 코드를 읽는 다른 사람이 전환 방법을 모르기 때문에 혼동 될 수 있습니다.

예 : https://jsfiddle.net/cxcawkyk/1/

.

hide () / show ()를 사용하여 표시 변경

자바 스크립트 :

$("#element_to_hide").hide();  // To hide
$("#element_to_hide").show();  // To show

장점 :

  • 항상 작동합니다.
  • 숨기기를 해제하면 이전 표시 값 사용으로 돌아갑니다.
  • 당신은 항상 어떤 상태로 바꾸고 있는지 알 것입니다.
    1. 상태가 중요한 경우 상태를 변경하기 전에 가시성을 확인하기 위해 if 문을 추가 할 필요가 없습니다.
    2. 상태가 중요한 경우 전환하려는 상태에 대한 코드를 읽는 다른 사람들을 혼동하지 않습니다.
  • 직관적입니다.

단점 :

  • 토글을 모방하려면 먼저 상태를 확인한 다음 다른 상태로 전환해야합니다. 대신에 toggle ()을 사용하십시오. 예제의 p2를 참조하십시오.

예 : https://jsfiddle.net/k0ukhmfL/

.

전반적으로 토글이 필요하지 않으면 hide () / show ()가 가장 좋습니다. 이 정보가 도움이 되었기를 바랍니다.


9
답변에 jQuery를 사용하기로 결정한 이유는 무엇입니까?
Draex_

@Draex_ 그래, 그가 자바 스크립트를 원하지 않았 으면 좋겠어? 솔직히 말해서, 다른 스레드가 의견이 있었기 때문에 대답을이 스레드로 이동해야했습니다. 사람들에게 유용한 정보를 제공하려고했지만 정보를 제공 할 곳이없는 것 같습니다.
Macainian

또한이$("#element_to_hide").hidden = true/false
내가 P

6

다음과 같이 모든 요소에 대해 숨기기 및 표시 방법을 직접 작성하십시오.

Element.prototype.hide = function() {
    this.style.display = 'none';
}
Element.prototype.show = function() {
    this.style.display = '';
}

이 후 다음 예제와 같이 일반적인 요소 식별자와 함께 메소드를 사용할 수 있습니다.

document.getElementByTagName('div')[3].hide();
document.getElementById('thing').show();

또는:

<img src="removeME.png" onclick="this.hide()">

5

Javascript는 비교적 빠르며 가단성이 좋으므로 권장합니다.

    <script>
function showStuff(id, text, btn) {
document.getElementById(id).style.display = 'block';
// hide the lorem ipsum text
document.getElementById(text).style.display = 'none';
// hide the link
btn.style.display = 'none';
}
</script>


<td class="post">

<a href="#" onclick="showStuff('answer1', 'text1', this); return false;">Edit</a>
<span id="answer1" style="display: none;">
<textarea rows="10" cols="115"></textarea>
</span>

<span id="text1">Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum</span>
</td>

3

테이블 에서 사용하는 경우 다음을 사용하십시오 .

  <script type="text/javascript">
   function showStuff(id, text, btn) {
    document.getElementById(id).style.display = 'table-row';
    // hide the lorem ipsum text
    document.getElementById(text).style.display = 'none';
    // hide the link
    btn.style.display = 'none';
}
</script>


<td class="post">

<a href="#" onclick="showStuff('answer1', 'text1', this); return false;">Edit</a>
<span id="answer1" style="display: none;">
<textarea rows="10" cols="115"></textarea>
</span>

<span id="text1">Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum</span>
</td>

1

클래스 및 ID 용 바닐라 JS

ID 별

document.querySelector('#element-id').style.display = 'none';

클래스 별 (단일 요소)

document.querySelector('.element-class-name').style.display = 'none';

클래스 별 (여러 요소)

for (let elem of document.querySelectorAll('.element-class-name')) {
    elem.style.display = 'none';
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.