【问题标题】:jQuery: Iterate through selector IDsjQuery:遍历选择器 ID
【发布时间】:2013-10-23 06:35:39
【问题描述】:

我有一些非常多余的 jQuery 代码。我想重构它以避免每 30 个数字重复一次。每个 pin-Small ID 都有一个 pin-Big ID,编号相同。我想要一个代码,它适用于每个 ID 更大的数字(#pin-Small2、#pin-Small3、#pin-Big2、#pin-Big3 等等......)。它是用 CoffeeScript 编写的,但我也提供了 JS 版本。

我找不到迭代这些数字的起点。你能帮我吗?如果您愿意,我将非常感谢,不要介意它是在 JS 还是 CS 中。提前非常感谢! :)

CoffeeScript

$('#pin-Small1').on
    mouseenter: ->
        $(@).hide()
        $('#pin-Big1').addClass "enabled"

$('#pin-Big1').on
    mouseleave: ->
        $(@).removeClass "enabled"
        $('#pin-Small1').show()

JavaScript

$('#pin-Small1').on({
  mouseenter: function() {}
}, $(this).hide(), $('#pin-Big1').addClass("enabled"));

$('#pin-Big1').on({
  mouseleave: function() {
    $(this).removeClass("enabled");
    return $('#pin-Small1').show();
  }
});

【问题讨论】:

  • 您应该在这些元素上使用class 对它们进行分组。您能否发布您的 HTML 代码,以便我们了解如何从 #pin-small 遍历到 #pin-big

标签: javascript jquery coffeescript refactoring iteration


【解决方案1】:

查看您的 HTML 可能真的很有帮助,因为它可以改变这个答案,但假设您的 HTML 看起来像这样:

<div id="pin-Small1" class="small" data-related-big-pin="pin-Big1"></div>
<div id="pin-Small2" class="small" data-related-big-pin="pin-Big2"></div>
...
<div id="pin-Big1" class="big" data-related-small-pin="pin-Small1"></div>
<div id="pin-Big2" class="big" data-related-small-pin="pin-Small2"></div>

你可以像这样使用数据属性:

$('.small').on
    mouseenter: ->
        $(@).hide()
        var bigPinId = $(@).data("related-big-pin")
        $('#' + bigPinId ).addClass "enabled"

$('.big').on
    mouseleave: ->
        $(@).removeClass "enabled"
        var smallPinId = $(@).data("related-small-pin")
        $('#' + smallPinId).show()

所以我们使用类来绑定 mouseenter/mouseleave 函数,然后读取数据属性以查找它们与哪些元素交互。

【讨论】:

  • 太好了,最适合我!聪明的解决方案,非常感谢您的帮助! (我编辑了代码,因为 data-related-small-pin 值有一个小错误:它们是 pin-Big 而不是 pin-Small)
【解决方案2】:

使用 CSS 类和相关的选择器... HTML:

<div id="pin-Small1" class="pin"></div>
<div id="pin-Small2" class="pin"></div>
<div id="pin-Small3" class="pin"></div>

jQuery:

$('.pin').each(function() {
    // do something with each element, e.g. to hide them all:
    $(this).hide();
});

【讨论】:

  • 对此的另一种解决方案,但不适合我的标记!不过,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-30
  • 2013-02-19
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多