【问题标题】:Conditionally showing elements: should I createElement or hide the elements?有条件地显示元素:我应该创建元素还是隐藏元素?
【发布时间】:2014-08-10 17:15:27
【问题描述】:

我的网站上有一个部分,我希望用户根据用户是否登录来查看该部分。

我想知道使用 jQuery 有条件地创建/删除元素(甚至动态写入),或者简单地隐藏/显示元素是否会更有效。

您将使用哪种最佳实践方法?我完成的 jQuery 教程总是让我添加和删除元素。

进一步(我希望我不会因此而激怒元神),关于何时应该创建/删除元素以及何时应该显示/隐藏它们的一般准则是什么?

提前谢谢你!

【问题讨论】:

  • 如果您不处理未登录用户不需要查看的敏感信息,请使用显示/隐藏。否则通过检查用户是否登录来动态加载部分数据。
  • 可以通过 PHP 完成。检查用户是否已登录,然后进行条件语句,如if(user == logggedin){echo "<div id='element1' >only visible for users who are logged in</div>";}else{echo "<div style='display: none;' id='element1' >only visible for users who are logged in</div>";}

标签: javascript jquery html


【解决方案1】:

很久以前,有人建议您永远不要在文档中放置您不使用的元素,并且在完成后删除该元素。

但是,您必须意识到,这个建议是在浏览器并不总是处理 CSS 并且布局控制很糟糕的时候提出的。这是一个基于文本的浏览器的时代,例如lynx

现在的世界已经大不相同,即使是大多数盲人用户[需要引用]都使用带有屏幕阅读器的成熟浏览器,这些屏幕阅读器足够聪明,可以理解隐藏的元素。

今天,将所有不敏感的内容简单地放在文档和样式表规则或 JavaScript 中以根据需要隐藏、取消隐藏和重新排列要容易得多。

也就是说,敏感信息应该受到限制。如果不允许最终用户查看某些内容,则不要将其提供给他们,即使是隐藏的。

记住,客户永远不能被信任。

编辑每条评论

假设您的系统有一个敏感字段,我们称之为coolness。酷是普通用户永远看不到的,但网络管理员可以设置他们喜欢和不喜欢的人。

如果你简单地说:

<div id="coolness_rating" style="display:none">
   <label>Coolness
     <input name="coolness" value="4">
   </label>
</div>

即使它隐藏在屏幕上,用户仍然可以查看 HTML 标记并看到该值。它隐藏起来,但很容易找到。

尽管如此,后端代码还需要一个围绕coolness 值的保护,以便有人无法调整发送的内容并将其添加进去。

后端代码需要如下所示:

if (loggedInuser.AccessLevel === AccessLevel.Admin) {
    // Only let Admins change the level
    referencedAccount.Coolness =  formData.coolness;
}

【讨论】:

  • 无论哪种方式,用户都会看到相同数量的东西,不是吗?无论是刚刚关闭,还是根本没有编写内容,网站所有可能部分的 javascript 都可以在客户端使用正确的工具访问,我想...
  • @user3916009 在不支持display:none 的旧版浏览器上,所有内容都将可见,即使它们没有被使用。还是您指的是敏感数据?
  • 是的,敏感数据。我认为即使 javascript 正在编写元素,即使它没有被调用,javascript 数据仍然可以访问。我想至少不会暴露来自服务器的任何敏感信息。
  • 添加了详细信息和示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多