【问题标题】:Can I get at attributes of individual elements that JQuery selects during selection?我可以获取 JQuery 在选择期间选择的单个元素的属性吗?
【发布时间】:2011-09-14 08:28:16
【问题描述】:

我正在使用 JQuery 和 JQuery UI Slider 在我的 HTML 页面中呈现一些控件,我想根据我的 HTML 中的属性设置滑块的范围。

这是我用来初始化滑块的代码...

$( ".slider" ).slider(
  {
    range: "min",
    value: 0,
    min: 0,
    max: 5,
    slide: handleSlide
  }
);

当然最大值是硬编码的。我想在我的代码中做的是......

<div class="slider" id="sliderA" max="10"></div>

但我不知道如何在选择过程中获取属性。

我想我可以通过this 访问它,就像你在 JQuery 的.each() 中所做的那样,但萤火虫告诉我这是文档,所以这不起作用。

我想做一些类似...的事情

$( ".slider" ).slider(
  {
    range: "min",
    value: 0,
    min: 0,
    max: blah.getAttribute("max"),
    slide: handleSlide
  }
);

但我不知道blah 可能是什么。

有没有公认的方法来做到这一点?我承认 JQuery 对我来说仍然有一点黑魔法,但我假设选择器以某种方式解析为对象数组,所以感觉我应该能够获取元素。

【问题讨论】:

    标签: jquery jquery-ui jquery-selectors


    【解决方案1】:
        $( ".slider" ).each(function()
        {
         $(this).slider(
          {
            range: "min",
            value: 0,
            min: 0,
            max: $(this).attr("max"),
            slide: handleSlide
          }
        );
        });
    

    【讨论】:

    • 在 each 中使用 $(this) 的含义是什么?感觉就像我会在循环中构建一个新的 JQuery,感觉很糟糕......还是我什么都不担心?
    • 别心疼。不想修改滑块插件就用吧。
    【解决方案2】:

    看起来您最好的选择是即时获取“max”属性的值:

        $('.slider').each(function (index) {
            $(this).slider({
                max: $(this).attr('max'),
                slide: function (event, ui) {
                    console.info(ui.value);
                }
            });
        });
    

    【讨论】:

    • 这行不通,因为有多个滑块的最大值可能不同...
    • 没错,它不会。 @SLaks 的回答是正确的。我更新了我的代码以反映他的建议。
    【解决方案3】:

    不,你不能。

    您的代码创建一个对象字面量,然后将其传递给slider 方法。在对象文字内部,您的外部 $ 调用不存在。

    相反,您需要在.each 内部调用.slider(),以便为每个元素创建单独的对象字面量。
    此外,由于您将在 each 回调中创建对象字面量,因此它将具有来自 each 回调的 this

    【讨论】:

      猜你喜欢
      • 2012-08-08
      • 2016-11-30
      • 1970-01-01
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 2012-02-24
      • 2010-12-17
      相关资源
      最近更新 更多