I answered the same question with the following plugin here . Please check back to find out more about creating the plugin.
The following plugin will allow you to use the callback function (while remaining built-in with jQuery-style markup) if this element exists. So, for your example, you can do something like:
$('select[name="modifier_option"]').exist(function() { if ($(this).val() > 0) { } else { } })
Plugin
(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
SpYk3HH 02 Oct '13 at 17:32 2013-10-02 17:32
source share