组织用于不同目的的HTML类名和ID(外观,jQuery和Selenium)

时间:2014-11-19 00:39:40

标签: javascript jquery html css selenium

关于编写干净的HTML / CSS,有无数篇文章。

我还没有找到关于组织用于不同目的的类名和ID的建议(设计与jQuery对比Selenium测试)。

对于任何给定的班级名称和ID,很难说出它的用途。在2人以上的团队中,似乎还有一种倾向,就是不断添加越来越多的ID和类,并避免清理已经存在的那些,以免破坏事物。

智慧的模式,惯例,工具或珍珠是否会有所帮助?

2 个答案:

答案 0 :(得分:1)

我会说:类(并直接或组合地定位HTML元素)用于样式,id用于行为(和Selenium),“不要重复自己/他人”思考 - 级联样式,这就是它。

如果每个人都遵循这个概念 - 实现保持干净代码的共同目标,但同时它也意味着更多问题 - 例如多个事件委托(不使用“适当的”面向对象的概念)和CSS类链元素可以导致更低的可读性和更多的处理时间。

所以 - 实际上很难有一般规则 - 特别是如果人们有不同的观点和代码风格。但我仍然认为 - 样式的类和行为的id适用于......

答案 1 :(得分:1)

我没有遇到任何帮助解决这种情况的工具。但是我使用了下面的约定,取得了一定的成功。但它们都不是一门精确的科学。

关于ID:

因为ID是更快的查找,所以每当我想要解决HTML的特定部分时,我倾向于使用它们,无论我如何使用它(样式/ jQuery / testing / etc)。

但是,因为每个元素只能有一个ID,所以实际上没有机会将命名约定或样式用于不同的用途。而且我发现,如果我出于某种原因想要解决某个元素,那么我很有可能会因为其他原因再次想要它。

例如:如果我在页面上有一个按钮并使用jQuery(通过ID)找到它来附加事件处理程序,那么我很可能也想找到该按钮来测试它的行为。

因为ID可以出于多种原因使用,它应该以一般方式命名,理想情况下描述元素代表,而不是它如何将会被使用。然后它应该有意义但是它被使用了。

但正如您所说,对于给定的ID

  

很难说出它用于什么

我同意,除非必须,否则一般不会试图找出答案。其他团队成员无法向已有元素的元素添加其他ID,如果符合其目的,则应鼓励他们重新使用现有ID。

使用此方法,不应更新或删除现有ID,并且这些ID将成为HTML的永久功能。 (但是像任何规则一样,如果需要它可以被打破并且风险是值得的)

这样每个人都应该习惯于重用现有的ID,而不会让其他人更改它们的代码,并且ID名称应该适用于所有用途。这应该导致没有太多“额外”ID。

关于课程:

  

在2人以上的团队中,似乎还有越来越多的倾向......并且避免清理那些已经存在的人,因为害怕破坏事物。

我的经历与你相符;人们倾向于添加新类而不是重用现有类。如果他们认为已经删除了使用它的唯一代码,那么有时这也会导致开发人员更容易删除它。这反过来咬了任何重复使用该课程的人,他们认为“下次我只是添加自己的新课程才能安全”。恶性循环的一个很好的例子。

我尝试以与ID相同的方式处理类(如上所述)和:

  • 使用非特定用途名称
  • 重新使用现有的课程,如果已经存在的课程名称
  • “有意义”
  • 不鼓励更改或删除现有课程(以增加重用的可信度)

通过额外的考虑,可以通过使用具有公共前缀(例如“tst”)的类来仅为“外部”原因(例如测试)添加类别。如果使用,我会考虑这种方法:

  • 会创建大量的课程(噪音)
  • 预计会发生很大的变化(因为使用率下降)
  • 预计未来可能会采用差异化方法进行替换
  • 由开发团队的外部小组控制

但是使用任何类型的命名约定都只能跟随它(或不跟随)的人一样好。当没有编译器告诉你有一个糟糕的引用时,测试确实是知道某些东西是否被破坏的唯一方法。

tldr;

因此,一般来说,我不会尝试按照它们的使用方式来组织我的ID和类,并且我尝试最大化它们的重用并最小化它们的更改。但如果对这个问题给出更有说服力的答案,我会有一个开放的心态!