javascript,仅在满足特定条件时才更改类

标签 javascript css class

我有一个类在一个页面上使用了 ~~120 次。仅当影响该类的其他事物满足特定条件时,我才想更改 margin-bottom。以下代码的问题在于它会更改与该类关联的所有内容……而不仅仅是满足条件的内容。

if (actualCharacters > charactersCanFitInContainer) {
  $("#Full .t16").each(function () {
    $(this).css('margin-bottom', '1.25em');
  });

  $("#Full .t8").each(function () {
    $(this).css('margin-bottom', '4.4175em');
  });
}

最佳答案

我想帮你解决你的问题,但是前提不对。您不应该尝试在 jQuery 中执行此操作。也许你的 CSS 有问题,最好尝试使用 CSS 来解决。

话虽如此,让我们回顾一下您的代码中的一些问题:


(1) 不要使用 $( selector ).each()

当你调用 jQuery 时

$( selector );

这个小家伙返回一个包含与选择器的 css 匹配的所有元素的数组。

可能有 200 个元素,甚至一千个,但永远不要执行 .each() 调用,除非您倾向于以独特的方式显式更改每个单独的元素。

$( selector ).each() 在匹配的选择器数组上运行一个 for 循环,如果你的匹配集太大,这会给你带来性能问题。

要更改所有匹配的元素,您只需执行以下操作:

$( selector ).css('margin-bottom', '1.25em');

Read more about .each()


(2) 不要使用 Javascript(或 jQuery)来完成 CSS 的工作

从您的问题来看,您似乎遇到了间距问题。 CSS 有一个 number of ways使用 overflowwhite-spacetext-overflow 等规则解决此问题,您应该在诉诸脚本编写之前探索这些规则。


(3) 避免使用.css()

您应该避免使用 $( selector ).css() 函数,因为它还会引入性能问题,尤其是在大型集合上。相反,您应该创建一个可以应用于集合并使用的类:

$( selector ).toggleClass( 'myclass' );
//or 
$( selector ).addClass( 'myclass' ); //and 
$( selector ).removeClass( 'myclass' );

因为这些函数更性能

更进一步,不要将类应用于每组匹配元素,而是将类添加到父元素,让子元素从更新的父类继承它们的样式。

阅读更多关于 toggleClass() 的信息


(5) 遵守约定

虽然在命名 CSS 规则时使用大写字母完全没问题,但您应该避免使用大写字母,因为这不是标准做法。拥有标准实践的全部意义在于,每个人都可以查看您的代码并确切地知道发生了什么,这使您的代码更易于调试和共享。


(6) 不要试图用过度设计的解决方案来弥补糟糕的设计

还要考虑到,有时,如果您唯一的解决方案是编写样式脚本,则需要更改需求。

我遇到过元素经理想要完成的事情在技术上不可行的情况。如果他们希望在有限的区域中显示大量文本,则需要允许使用滚动条或考虑对文本 block 保持标准大小限制。

回到这个元素的利益相关者那里,告诉他们他们想做的事情是不合理的,并一起做出决定来更好地设计这个小部件。

作为开发人员,你不应该允许不合理的要求,有些东西只是需要重新设计,而不是让你想出一个乱七八糟的方法来解决糟糕的设计。


结论

就您的问题而言,尝试使用专门解决您遇到的间距问题(溢出、文本溢出等)的 CSS 规则。您可能需要更深入地研究样式以找到执行此操作的更好方法。

关于javascript,仅在满足特定条件时才更改类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14758404/

相关文章:

javascript - 使用 Prism JS 不显示标记

python - Biopython 类实例 - Entrez.read : I don't know how to manipulate the output 的输出

c# - ActiveX 事件在 javascript 中不起作用

javascript - 看不到卡片

javascript - 允许用户只打开文件但不保存文件

c# - 为什么我们从接口(interface)而不是类创建对象实例?

.net - 在基础对象中构造派生类型的对象

javascript - 使用单个代码分割文本

javascript - 在 jquery 中创建和分配一个 css 类

css - 背景图像随着背景附件固定属性消失