Is there any way to check if an element has jquery select2 already applied to it?

后端 未结 4 2037
遇见更好的自我
遇见更好的自我 2021-01-03 18:03

I want to apply select2 to a bunch of jquery elements on the page that all have the same class name but it looks like if i call select2() on an element that already has had

相关标签:
4条回答
  • 2021-01-03 18:06

    You can check if Select2 operations give and error or not with try..catch. If there is an error thrown, that means that there is not Select2 in the element.

    The downside is that this will still output an error in the browser console.

    try {
        $(obj).select2("close")
    } catch(err) {
        // No Select2 in the element
        $(obj).select2({ width: "455px" });
    }
    
    0 讨论(0)
  • 2021-01-03 18:10

    Working solution:

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

    Links:

    1. ^= attribute starts with selector
    2. :not selector
    0 讨论(0)
  • 2021-01-03 18:14

    Above answer is almost correct.
    But it creates problem when we are adding elements dynamically on same page and applying select 2 to newly created element.
    At that times selector has to be specified using not only class but also with input type. PFB reference code.

    $('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 
        }
    }
    
    0 讨论(0)
  • 2021-01-03 18:32

    you can check if the element has select2 attribute

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

    EDIT

    As @Fr0zenFyr said in his comment for v4.0 you can use :

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

    0 讨论(0)
提交回复
热议问题