Skip to content

Commit c736ea9

Browse files
committed
append li element directly when calculating height (#2393)
1 parent da7e8cc commit c736ea9

File tree

1 file changed

+26
-11
lines changed

1 file changed

+26
-11
lines changed

js/bootstrap-select.js

+26-11
Original file line numberDiff line numberDiff line change
@@ -653,6 +653,7 @@
653653
}
654654

655655
var elementTemplates = {
656+
div: document.createElement('div'),
656657
span: document.createElement('span'),
657658
i: document.createElement('i'),
658659
subtext: document.createElement('small'),
@@ -1631,6 +1632,7 @@
16311632
break;
16321633
}
16331634

1635+
item.element = liElement;
16341636
mainElements.push(liElement);
16351637

16361638
// count the number of characters in the option - not perfect, but should work in most cases
@@ -1827,17 +1829,17 @@
18271829
liHeight: function (refresh) {
18281830
if (!refresh && (this.options.size === false || Object.keys(this.sizeInfo).length)) return;
18291831

1830-
var newElement = document.createElement('div'),
1831-
menu = document.createElement('div'),
1832-
menuInner = document.createElement('div'),
1832+
var newElement = elementTemplates.div.cloneNode(false),
1833+
menu = elementTemplates.div.cloneNode(false),
1834+
menuInner = elementTemplates.div.cloneNode(false),
18331835
menuInnerInner = document.createElement('ul'),
1834-
divider = document.createElement('li'),
1835-
dropdownHeader = document.createElement('li'),
1836-
li = document.createElement('li'),
1837-
a = document.createElement('a'),
1838-
text = document.createElement('span'),
1836+
divider = elementTemplates.li.cloneNode(false),
1837+
dropdownHeader = elementTemplates.li.cloneNode(false),
1838+
li,
1839+
a = elementTemplates.a.cloneNode(false),
1840+
text = elementTemplates.span.cloneNode(false),
18391841
header = this.options.header && this.$menu.find('.' + classNames.POPOVERHEADER).length > 0 ? this.$menu.find('.' + classNames.POPOVERHEADER)[0].cloneNode(true) : null,
1840-
search = this.options.liveSearch ? document.createElement('div') : null,
1842+
search = this.options.liveSearch ? elementTemplates.div.cloneNode(false) : null,
18411843
actions = this.options.actionsBox && this.multiple && this.$menu.find('.bs-actionsbox').length > 0 ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null,
18421844
doneButton = this.options.doneButton && this.multiple && this.$menu.find('.bs-donebutton').length > 0 ? this.$menu.find('.bs-donebutton')[0].cloneNode(true) : null,
18431845
firstOption = this.$element.find('option')[0];
@@ -1856,8 +1858,21 @@
18561858
dropdownHeader.className = 'dropdown-header';
18571859

18581860
text.appendChild(document.createTextNode('\u200b'));
1859-
a.appendChild(text);
1860-
li.appendChild(a);
1861+
1862+
if (this.selectpicker.current.data.length) {
1863+
for (var i = 0; i < this.selectpicker.current.data.length; i++) {
1864+
var data = this.selectpicker.current.data[i];
1865+
if (data.type === 'option') {
1866+
li = data.element;
1867+
break;
1868+
}
1869+
}
1870+
} else {
1871+
li = elementTemplates.li.cloneNode(false);
1872+
a.appendChild(text);
1873+
li.appendChild(a);
1874+
}
1875+
18611876
dropdownHeader.appendChild(text.cloneNode(true));
18621877

18631878
if (this.selectpicker.view.widestOption) {

0 commit comments

Comments
 (0)