(function($) {
	var EVENT = "domReady";

	$.domReady = function() {
		var arg1 = arguments[0];

		if ($.isFunction(arg1)) {
			$(document).on(EVENT, function(e) {
				arg1.apply(e.target, arguments);
			});
			return;
		}

		if ($.isFunction(arguments[1])) {
			var o = {};
			o[arg1] = arguments[1];
			arg1 = o;
		}

		if ($.isPlainObject(arg1)) {
			$(document).on(EVENT, function(e) {
				var args = arguments;
				var $target = $(e.target);
				$.each(arg1, function(selector, f) {
					$target.find(selector).add($target.is(selector) ? $target : null).each(function() {
						f.apply(this, args);
					});
				});
			});
		}
	};

	$.fn.domReady = function() {
		return this.trigger(EVENT, arguments);
	};

	$(document).on("ready", function(e) {
		if (e.target !== this) return;
		$(this).domReady();
	});

})(jQuery);

// Использование

/*$.domReady(function(e) {
	console.log("binded function fired", this, arguments);
});

$.domReady(function() {
	$(this).find("li").each(function() {
		console.log("binded each fired", this);
	});
});

$.domReady({
	"li" : function() {
		console.log("binded hash fired", this);
	}
});

$.domReady("li", function() {
	console.log("binded one fired", this);
});

$(function() {
	$(".head").domReady();
	$(".head").domReady('extra!!!', 111).remove();
	$(".head").trigger('domReady', ['extra!!!', 222]);
	$("ul").domReady();
});
*/

