【问题标题】:Show\Hide html element - pros and cons to each approach [closed]显示\隐藏html元素-每种方法的优缺点[关闭]
【发布时间】:2016-02-21 12:41:34
【问题描述】:

各有什么优缺点?

直接改变元素样式:

$('#element_to_hide').hide(); // when we want to hide
$('#element_to_hide').show(); // when we want to show

添加\删除类:

.hidden {display:none}
$('#element_to_hide').addClass('hidden');// when we want to hide
$('#element_to_hide').removeClass('hidden'); // when we want to show

还有其他方法吗?如果有,它们的优缺点是什么?

【问题讨论】:

  • 最简单的方法是使用 .toggle();
  • 我不知道hide/show/hidden的效果,但我总是用:$("#element_to_hide").css("display", "none");
  • $('#element_to_hide').toggle()
  • 更新了问题以允许非基于意见的答案。
  • 重写了我的答案。它现在更加健壮并包含示例。

标签: jquery css hide element show


【解决方案1】:

jquery 的隐藏和显示功能更好,因为它不只是改变显示。假设您的显示是内联块,如果您希望元素再次可见,则必须对内联块进行硬编码。如果你只使用 hide 和 show 它会变回原来的样子。

如果其他人要处理您的代码,也更容易阅读。

【讨论】:

  • 确实如此。我想除了隐藏和取消隐藏之外,我从不更改显示。
  • 添加\删除类也不会改变显示,它只是添加或删除类。
  • 是的,写完帖子我也意识到了,但我还是坚持我所说的,我觉得隐藏和显示更好。
  • add\remove 类不会改变显示,但它并不总是能隐藏东西。查看我修改后的答案。
【解决方案2】:

更好的是addClass()removeClass()(和toggleClass())。更好,因为它不会将内联样式放入 DOM,因此您可以在 CSS 中使用此类进行任何您想做的事情。

【讨论】:

  • 这并不总是有效。查看我修改后的答案。
【解决方案3】:

以下是几种不同的方法以及每种方法的优缺点。

-

使用 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。
  • 如果使用 css() 在 javascript 中设置显示,则不会隐藏。请参阅示例中的 p3。
  • 代码稍微多一些,因为您必须定义一个 css 属性。

示例:https://jsfiddle.net/476oha8t/8/

-

使用 toggle() 改变显示

Javascript:

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

优点:

  • 始终有效。
  • 让您不必担心切换之前的状态。这样做的明显用途是用于一个....切换按钮。
  • 简短而简单。

缺点:

  • 如果您需要知道它正在切换到哪个状态以执行不直接相关的操作,则必须添加更多代码(一个 if 语句)来找出它处于哪个状态。
  • 与上一个骗局类似,如果你想运行一组包含 toggle() 的指令来进行隐藏,但你不知道它是否已经隐藏,你必须添加一个检查(一个if 语句)首先找出它是否已经隐藏,然后跳过。请参阅示例的 p1。
  • 与前面的 2 个缺点相关,使用 toggle() 处理特别隐藏或特别显示的内容,可能会使阅读您的代码的其他人感到困惑,因为他们不知道他们会以哪种方式切换。

示例:https://jsfiddle.net/cxcawkyk/1/

-

使用 hide()/show() 改变显示

Javascript:

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

优点:

  • 始终有效。
  • 取消隐藏后,将返回使用之前的显示值。
  • 您将始终知道要切换到哪个状态,因此您:
    1. 如果状态很重要,则无需添加 if 语句来检查可见性,然后再更改状态。
    2. 不会让阅读您的代码的其他人混淆您正在切换到哪个状态,如果状态重要的话。
  • 直观。

缺点:

  • 如果要模拟切换,则必须先检查状态,然后再切换到其他状态。使用 toggle() 代替这些。请参阅示例的 p2。

例如:https://jsfiddle.net/k0ukhmfL/

-

使用 css() 改变显示

这个方法我不推荐使用,但为了完整而添加。

Javascript:

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

优点:

  • 隐藏和取消隐藏。就是这样。

缺点:

  • 如果您将“显示”属性用于其他用途,则必须硬编码隐藏之前的值。因此,如果您有“内联”,则必须执行 $("#element_to_hid").css("display", "inline"); 否则它将默认返回“阻止”或其他强制执行的状态。
  • 容易出现拼写错误。

示例:https://jsfiddle.net/4chd6e5r/1/


TL;博士。我认为最好的方法是Changing display using hide()/show(),除非您特别需要它作为切换开关。

【讨论】:

  • jQuery hide and show does 恢复显示设置。您正在使用什么测试表明不是这样?
  • 嗯。看来我做的测试是无效的。对此我深表歉意,我会更新我的答案。
  • 感谢 Alohci 的洞察力。我已经修改了我的答案以详细说明所有内容。
  • 有一点需要注意,以备日后参考。 CSS3 有一个box-suppress 属性的提议,目的是解决这个问题,而不需要复杂的保存和恢复 JS。不过现在还为时尚早。
  • 感谢@Gimby 的编辑。我只想知道一件事。为什么要替换“。”和 ”-”?只是好奇。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多