Скрыть/показать элемент JavaScript

Как я могу скрыть "Редактировать" -link после нажатия на него? а также можно ли скрыть текст "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>

Ответ 1

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>

Ответ 2

Вы также можете использовать этот код для отображения/скрытия элементов:

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

Примечание Разница между style.visibility и style.display равна при использовании видимости: скрытый в отличие от дисплея: нет, тег не отображается, но для него выделяется пространство на странице. Тег отображается, он просто не отображается на странице.

См. ссылку , чтобы увидеть различия.

Ответ 3

Я хотел бы предложить вам опцию JQuery.

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

Например:

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

Ответ 4

Я бы предложил это скрыть элементы (как предложили другие):

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

Но чтобы сделать элементы видимыми, я бы предложил это (вместо display = 'block'):

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

Причина в том, что использование display = 'block' вызывает дополнительное поле margin/whitespace рядом с элементом, который становится видимым как в 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, поэтому кажется, что это лучший подход.

Ответ 5

вы можете использовать скрытое свойство элемента:

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

Ответ 6

Вы должны думать о 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>

Ответ 7

Несмотря на то, что этот вопрос был дан много ответов ранее, я думал, что добавлю к нему более полный и надежный ответ для будущих пользователей. Основной ответ решает проблему, но я считаю, что лучше понять/понять некоторые из различных способов показать/скрыть вещи.

.

Изменение отображения с помощью css()

Так я и делал это, пока не нашел некоторые из этих способов.

JavaScript:

$("#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/JavaScript:

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

Плюсы:

  • Он прячется... иногда. См. P1 на примере.
  • После того, как он появится, он вернется обратно к предыдущему отображаемому значению.... иногда. См. P1 на примере.
  • Если вы хотите захватить все скрытые объекты, вам просто нужно сделать $(".hidden").

Минусы:

  • Не скрывает, если отображаемое значение было задано непосредственно на html. См. P2 на примере.
  • Не скрывает, если дисплей установлен в javascript, используя css(). См. P3 на примере.
  • Чуть больше кода, потому что вам нужно определить атрибут css.

Пример: https://jsfiddle.net/476oha8t/8/

.

Изменение дисплея с помощью переключателя()

JavaScript:

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

Плюсы:

  • Всегда работает.
  • Позволяет вам не беспокоиться о том, какое состояние было до переключения. Очевидное использование для этого - для кнопки... toggle.
  • Короче и просто.

Минусы:

  • Если вам нужно знать, к какому состоянию оно переключается, чтобы сделать что-то, не связанное напрямую, вам нужно будет добавить еще код (оператор if), чтобы узнать, в каком состоянии оно находится.
  • Как и предыдущий con, если вы хотите запустить набор инструкций, которые содержат toggle() для скрытия, но вы не знаете, если он уже скрыт, вам нужно добавить чек ( if), чтобы узнать сначала, и если он уже скрыт, пропустите. Обратитесь к p1 примера.
  • Что касается предыдущих двух минусов, использование toggle() для чего-то, что конкретно скрывается или конкретно отображается, может смущать других, читающих ваш код, поскольку они не знают, к какому пути они будут переключаться.

Пример: https://jsfiddle.net/cxcawkyk/1/

.

Изменение отображения с помощью функции hide()/show()

JavaScript:

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

Плюсы:

  • Всегда работает.
  • После того, как он появится, он вернется к использованию предыдущего отображаемого значения.
  • Вы всегда будете знать, в каком состоянии вы меняете, чтобы вы:
    • не нужно добавлять операторы для проверки видимости перед изменением состояний, если состояние имеет значение.
    • не будет путать других, читающих ваш код, о том, к какому состоянию вы переключаетесь, если, если состояние имеет значение.
  • Интуитивно.

Минусы:

  • Если вы хотите подражать переключателю, вам нужно сначала проверить состояние, а затем переключиться на другое состояние. Вместо них используйте toggle(). Обратитесь к p2 примера.

Пример: https://jsfiddle.net/k0ukhmfL/

.

В целом, я бы сказал, что лучше всего быть hide()/show(), если вам не нужно, чтобы это было переключением. Надеюсь, вы нашли эту информацию полезной.

Ответ 8

Просто создайте методы hide и show для всех элементов, как показано ниже.

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()">

Ответ 9

Я рекомендую 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>

Ответ 10

Если вы используете его в таблице, используйте это: -

  <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>