diff --git a/src/nya-bs-select.js b/src/nya-bs-select.js index dce65d2..f272626 100644 --- a/src/nya-bs-select.js +++ b/src/nya-bs-select.js @@ -663,6 +663,19 @@ nyaBsSelect.directive('nyaBsSelect', ['$parse', '$document', '$timeout', '$compi } } } + + function supportsSelector(selector) { + var el = document.createElement('div'); + el.innerHTML = ['­', ''].join(''); + el = document.body.appendChild(el); + var style = el.getElementsByTagName('style')[0]; + if (style && style.sheet && style.sheet.rules && style.sheet.cssRules) { + var ret = !!(style.sheet.rules || style.sheet.cssRules)[0]; + document.body.removeChild(el); + return ret; + } + return false; + } function findFocus(fromFirst) { var firstLiElement; @@ -673,10 +686,18 @@ nyaBsSelect.directive('nyaBsSelect', ['$parse', '$document', '$timeout', '$compi } // focus on selected element - for(var i = 0; i < dropdownMenu.children().length; i++) { - var childElement = dropdownMenu.children().eq(i); - if (!childElement.hasClass('not-match') && childElement.hasClass('selected')) { - return dropdownMenu.children().eq(i)[0]; + if (supportsSelector(".selected:not(.not-match)")) { + var match = dropdownMenu[0].querySelector('.selected:not(.not-match)'); + if (match) + return match; + } + else { + // Fallback for IE8 users + for(var i = 0; i < dropdownMenu.children().length; i++) { + var childElement = dropdownMenu.children().eq(i); + if (!childElement.hasClass('not-match') && childElement.hasClass('selected')) { + return dropdownMenu.children().eq(i)[0]; + } } }