【问题标题】:Is there any way to check if an element has jquery select2 already applied to it?有没有办法检查一个元素是否已经应用了 jquery select2 ?
【发布时间】:2015-07-03 10:38:40
【问题描述】:

我想将select2 应用于页面上的一堆 jquery 元素,它们都具有相同的类名,但看起来如果我在一个已经调用了 select2() 的元素上调用 select2()然后它爆炸了。这是我的代码

 $('.MyDropdowns').each(function (i, obj) {
    $(obj).select2({ width: "455px" });
});

所以我想要类似的东西:

 $('.MyDripdowns').each(function (i, obj) {
    if (!$(obj).HasSelect2Initiatized)
    {
        $(obj).select2({ width: "455px" });
    }
});

这样的事情存在吗?

【问题讨论】:

  • 看起来它隐藏了它被调用的元素,所以你可以试试if($(obj).is(":visible"))
  • 这似乎不是万无一失的,因为如果元素因其他原因被隐藏怎么办?
  • 你为什么要给select2()打两次电话?
  • @leora 是的,放弃这个想法 - 以前从未使用过该插件,遗憾的是他们的插件没有做其他插件所做的事情并使用“实例”选项。 sMr 下面的回答看起来像要走的路

标签: jquery jquery-select2


【解决方案1】:

你可以检查元素是否有select2属性

$('.MyDripdowns').each(function (i, obj) {
    if (!$(obj).data('select2'))
    {
        $(obj).select2({ width: "455px" });
    }
});

编辑

正如@Fr0zenFyr 在他对 v4.0 的评论中所说,您可以使用:

if (!$(obj).hasClass("select2-hidden-accessible"))

【讨论】:

  • 这仍然是我在回发后的选择:/
  • 回发是什么意思?
  • 至少对于 v4.0,if (!$(obj).hasClass(select2-hidden-accessible)) 测试应该可以工作。我认为它不再适用于 data 属性。
  • @Fr0zenFyr 的修改对我有用。请记住 hasClass 接受一个字符串作为类名。
【解决方案2】:

工作解决方案:

$('.MyDripdowns:not([class^="select2"])').each(function (i, obj) {
    $(obj).select2({width: "455px"});
})

链接:

  1. ^= attribute starts with selector
  2. :not selector

【讨论】:

    【解决方案3】:

    上面的答案几乎是正确的。
    但是当我们在同一页面上动态添加元素并将 select 2 应用于新创建的元素时,它会产生问题。
    那时选择器不仅要使用类而且还要使用输入类型来指定。 PFB 参考代码。

    $('inputp[type="text"].MyDripdowns').each(curr_idx, curr_elem){
        //Check if select 2 is already applied or not
        if($(curr_elem).hasClass('.select2-offscreen')){
          //Select 2 is already applied to this element
        }
        else{
           //Apply Select 2 to this element 
        }
    }
    

    【讨论】:

      【解决方案4】:

      您可以使用try..catch 检查 Select2 操作是否给出和错误。如果有报错,说明元素中没有Select2。

      缺点是这仍然会在浏览器控制台中输出错误。

      try {
          $(obj).select2("close")
      } catch(err) {
          // No Select2 in the element
          $(obj).select2({ width: "455px" });
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-01
        • 2020-11-25
        • 2016-07-15
        • 1970-01-01
        • 2011-04-08
        • 1970-01-01
        相关资源
        最近更新 更多