【问题标题】:jQuery .each() wildcard - Select all elements with class starting with specific stringjQuery .each() 通配符 - 选择类以特定字符串开头的所有元素
【发布时间】:2016-03-25 09:43:41
【问题描述】:

我正在为不同的divs(jQuery 和 jQuery UI)制作动画,所以我创建了 slideinfadein 等类,我可以将它们应用到我需要动画的任何地方。在我的 Javascript 文件中,运行 .each() 循环以查找每个具有 fadeinsidein 类的元素

我想要做的是能够通过添加fadein-x 的类来选择动画需要多长时间,其中x 是它所花费的毫秒数。例如:

.fadein-500 - 元素需要 500 毫秒才能淡入

.slidein-1000 - 元素滑入需要1000 毫秒

使用.each() 函数,我可以遍历具有特定类的元素,但是我可以使用以特定字符串开头的类(如通配符)遍历所有元素吗?也许是这样的(* 是通配符):

$('.fadein-*').each(...)

上面将选择所有具有fadein- 类的元素,然后我可以对类进行切片以获取时间,并应用动画。

所以,总而言之,这就是我想要的:

能够以可自定义的时间为元素设置动画,而无需更改 Javascript 文件

如果有其他方法可以做我想做的事,请告诉我!谢谢

注意:我需要这个的原因是因为我正在创建一个 Wordpress 主题,并且我将使用 PHP 来回显用户输入的时间。显然我不想创建 3000每次可能以毫秒为单位的不同类

另外,this question 不一样,OP 询问的是不同的东西

【问题讨论】:

标签: jquery html animation jquery-selectors css-selectors


【解决方案1】:

这应该选择类以fade-in 开始的位置

$("[class^='fadein-']").each(...)

我认为没有办法使用类选择器来实现,因此必须以属性开头并使用类属性。正如 cmets 中所指出的,这只有在第一个类是 fadein- 才能在它之前与另一个类一起工作时才有效,那么您将不得不使用包含,如另一个答案所示。

$("[class*='fadein-']").each(...)

【讨论】:

  • 拥有class="my-element fadein-500" 是行不通的。
  • @falsarella 啊,我知道你现在从哪里来。好点子。
  • 谢谢!很有用! @falsarella 你的回答和 Dhunts 都很有用
【解决方案2】:

我建议使用数据属性:

$('.fadein').each(function() {
  var duration = $(this).data('duration') ? $(this).data('duration') : 500; // a sane default
  $(this).fadeIn(duration);
});
<p class="fadein" data-duration="1500">1500 ms!</p>

【讨论】:

  • @Druzion 其他答案跳过了拆分 className 的部分(尤其是多个名称的情况),以确定您制作动画的时间:)
  • 我和 andr 在一起。这在语义上更加一致;类不应在其字符串的“部分”中具有意义,它们应该是单独的标识符。我不希望它尝试处理uiPanelControlFadeInUserHomepage
  • @andr 是的,这是一个公平的观点。我更喜欢其他人的唯一原因是他们更短
  • 我很好奇你能把字符串分割部分做多短。但我认为你不应该这样做。
  • @andr 其实想一想,这对解决我的问题更有意义(因为我还需要对所有动画元素做某些事情)。
猜你喜欢
  • 2011-04-07
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-18
  • 1970-01-01
  • 2011-05-09
  • 2017-05-26
相关资源
最近更新 更多