【问题标题】:jQuery found not existed object [duplicate]jQuery找到不存在的对象[重复]
【发布时间】:2012-08-12 16:13:50
【问题描述】:

我尝试检测是否存在一些:

var listBoxSelector = $("div#selectors select:eq(1)");
var option = listBoxSelector.find("option[value=" + value + "]:eq(0)");
alert(option);

但如果这样的选项不存在,无论如何我都会收到 Object。有什么更好的方法来检测是否存在某个值?

【问题讨论】:

    标签: javascript jquery select option exists


    【解决方案1】:

    我用以下插件here 回答了同样的问题。有关创建插件的完整详细信息,请访问答案。


    如果元素存在,以下插件将允许您使用回调功能(与 jQuery 样式标记保持内联)。因此,对于您的示例,您可能会执行以下操作:

    listBoxSelector.exist(function() { // will ONLY fire if this element even exist
        alert($(this).find("option[value=" + value + "]:eq(0)"));
    })
    

    插件

    (function($) {
        if (!$.exist) {
            $.extend({
                exist: function() {
                    var ele, cbmExist, cbmNotExist;
                    if (arguments.length) {
                        for (x in arguments) {
                            switch (typeof arguments[x]) {
                                case 'function':
                                    if (typeof cbmExist == "undefined") cbmExist = arguments[x];
                                    else cbmNotExist = arguments[x];
                                    break;
                                case 'object':
                                    if (arguments[x] instanceof jQuery) ele = arguments[x];
                                    else {
                                        var obj = arguments[x];
                                        for (y in obj) {
                                            if (typeof obj[y] == 'function') {
                                                if (typeof cbmExist == "undefined") cbmExist = obj[y];
                                                else cbmNotExist = obj[y];
                                            }
                                            if (typeof obj[y] == 'object' && obj[y] instanceof jQuery) ele = obj[y];
                                            if (typeof obj[y] == 'string') ele = $(obj[y]);
                                        }
                                    }
                                    break;
                                case 'string':
                                    ele = $(arguments[x]);
                                    break;
                            }
                        }
                    }
    
                    if (typeof cbmExist == 'function') {    //  has at least one Callback Method
                        var exist =  ele.length > 0 ? true : false; //  strict setting of boolean
                        if (exist) {    // Elements do exist
                            return ele.each(function(i) { cbmExist.apply(this, [exist, ele, i]); });
                        }
                        else if (typeof cbmNotExist == 'function') {
                            cbmNotExist.apply(ele, [exist, ele]);
                            return ele;
                        }
                        else {
                            if (ele.length <= 1) return ele.length > 0 ? true : false;
                            else return ele.length;
                        }
                    }
                    else {  //  has NO callback method, thus return if exist or not based on element existant length
                        if (ele.length <= 1) return ele.length > 0 ? true : false; //   strict return of boolean
                        else return ele.length; //  return actual length for how many of this element exist
                    }
    
                    return false; //    only hits if something errored!
                }
            });
            $.fn.extend({
                exist: function() {
                    var args = [$(this)];
                    if (arguments.length) for (x in arguments) args.push(arguments[x]);
                    return $.exist.apply($, args);
                }
            });
        }
    })(jQuery);
    

    jsFiddle

    【讨论】:

      【解决方案2】:
      if(listBoxSelector.find("option[value=" + value + "]:eq(0)") == 0){
        //nothing found
      }
      

      【讨论】:

      • 你忘记.length了吗?事实上,它不会工作。
      【解决方案3】:

      检查option对象的length

      var listBoxSelector = $("div#selectors select:eq(1)");
      var option = listBoxSelector.find("option[value=" + value + "]:eq(0)");
      if (option.length>0){
         alert(option);
      }
      

      【讨论】:

        【解决方案4】:

        您可以使用 jQuery 对象的length 属性:

        jQuery 对象中的元素个数。

        if (listBoxSelector.find("option[value="+value+"]").length) {
             alert('Exists')
        }
        

        【讨论】:

          猜你喜欢
          • 2018-09-29
          • 1970-01-01
          • 2016-12-02
          • 1970-01-01
          • 2014-09-17
          • 1970-01-01
          • 2014-08-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多