我有一个表,我显示/隐藏一个完整的列由jQuery通过CSS类不存在:

<table>
   <thead>
      <tr>
         <th></th>
         <th class="target"></th>
         <th></th>
      </tr>
   </thead>
   <tbody>
      <tr>
         <td></td>
         <td class="target"></td>
         <td></td>
      </tr>
      <tr>
         <td></td>
         <td class="target"></td>
         <td></td>
      </tr>
   </tbody>
</table>

有了这个DOM,我可以在一行通过jQuery: $('.target').css('display','none');

这是完美的工作,但它是有效的使用CSS类没有定义?我应该为它创建一个空类吗?

<style>.target{}</style>

有没有副作用或者有没有更好的方法?


当前回答

没有必要在样式表中定义CSS类。它应该可以正常工作。不过,添加它也无妨。

其他回答

当您在HTML中添加类时,类将被定义,因此您的解决方案完全没问题

正如很多人提到的,是的,使用没有指定CSS的类是完全有效的,而不是把它们看作“CSS类”,你应该简单地认识到类和ID的语义分别是组和单独的元素。

我想插一句,因为我觉得在这个例子中,一个重要的点没有被提出。如果你曾经需要对可变长度的元素进行可视化操作(在这种情况下,你使用的是表行),那么认识到通过Javascript这样做的成本可能非常昂贵总是有意义的(例如,如果你有数千行)。

在这种情况下,假设我们知道列2总是有可能被隐藏(这是表的一个有意识的函数),那么设计一个CSS样式来处理这个用例是有意义的。

table.target-hidden .target { display: none; }

然后不是使用JS遍历DOM找到N个元素,我们只需要在一个(我们的表)上切换一个类。

$("table").addClass("target-hidden")

通过给表分配一个ID,这将更快,你甚至可以通过使用:n -child选择器引用列,这将进一步减少你的标记,但我不能评论效率。这样做的另一个原因是我讨厌内联样式,并将竭尽全力根除它!

你可以在不使用它的情况下使用CSS类,但我建议如果你只是为JavaScript/jQuery代码添加CSS类,在它前面加上js-YourClassName,这样前端开发人员就不会使用这些类来设置元素的样式。他们应该明白,这些类可以在任何时候被删除。

参考jQuery验证引擎。即使在那里,我们也使用不存在的类在HTML属性上添加验证规则。因此,使用样式表中没有实际声明的类并没有错。

根据HTML5规范:

类属性的值必须是由空格分隔的集合 表示元素所属的各种类的标记。 ... 对于作者可以在其中使用的令牌没有其他限制 类属性,但鼓励作者使用 描述内容的本质,而不是描述的价值 内容的理想表示形式。

此外,在版本4中:

class属性在HTML中有几个角色: 作为样式表选择器(当作者希望分配样式时) 一组元素的信息)。 用于一般用途的加工 用户代理。

您的用例属于第二种场景,这使得它成为使用类属性的合法示例。