!function ($) { "use strict"; // jshint ;_; /* DROPDOWN CLASS DEFINITION * ========================= */ var getDropdownSelector = function(obj) { var selector = obj.attr('dropdown'); if (!selector) { selector = obj.attr('href'); selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 } return $(selector); },Dropdown = function (element) { var $el = $(element).bind('click.dropdown.data-api', this.toggle); $('html').bind('click.dropdown.data-api', function () { getDropdownSelector($el).removeClass('open'); }); }; Dropdown.prototype = { constructor: Dropdown , toggle: function (e) { var $this = $(this) , selector , isActive; if ($this.is('.disabled, :disabled')) return selector = getDropdownSelector($this); if(selector.length == 0) { return false; } isActive = selector.hasClass('open'); clearMenus(); if (!isActive) { if($this.attr('id')) { //璁板綍涓€涓嬭皝鎵撳紑鐨 selector.attr('dropdown-sourceid', $this.attr('id')); }else{ selector.removeAttr('dropdown-sourceid'); } var pos = $this.position(), top = pos.top + $this.height(), left = pos.left; if($this.parent()[0]== selector.parent()[0]) { //濡傛灉閮戒綅浜庡悓涓€涓鍣ㄧ殑璇 //鐩存帴鐢╬osition灏卞彲浠 }else{ var offsetParent = $this.offsetParent(), selectorParent = selector.offsetParent(); while(offsetParent[0] != selectorParent[0] && offsetParent[0] != document.body) { //淇濊瘉瑕佽绠楃殑鎸夐挳鐨刼ffsetParent涓庤彍鍗曠殑offsetParent淇濇寔涓€鑷达紝杩欐牱灏卞ソ璁$畻浣嶇疆浜 top += offsetParent.position().top + offsetParent.scrollTop(); left += offsetParent.position().left + offsetParent.scrollLeft(); offsetParent = offsetParent.offsetParent(); } if(offsetParent[0] == selectorParent[0]) { //濡傛灉鑿滃崟涓庢寜閽綅浜庡悓涓€涓鍣ㄥ唴锛屽垯鍙渶瑕佽绠楁湰offsetParent鐨勬粴鍔ㄦ潯鐨勪綅缃 top += offsetParent.scrollTop(); left += offsetParent.scrollLeft(); } } if($.browser.msie && $.browser.version < 8) { //IE6/7 top += 2; } selector.css({ left: left, top: top }).toggleClass('open'); //瑙﹀彂鎵撳紑浜嬩欢 selector.trigger('dropdown.open', [$this.attr('id')]); } return false; } } function clearMenus() { $('.dropdown-menu.open').removeClass('open'); } /* DROPDOWN PLUGIN DEFINITION * ========================== */ $.fn.dropdown = function (option) { return this.each(function () { var $this = $(this) , data = $this.data('dropdown'); if (!data) $this.data('dropdown', (data = new Dropdown(this))); if (typeof option == 'string') data[option].call($this); }); } $.fn.dropdown.Constructor = Dropdown; }(window.jQuery);