Skip to content

Commit 4b5eb3c

Browse files
authored
Backport #33634 (#33649)
Dropdown: support `.dropdown-item` wrapped in `<li>` tags
1 parent d967553 commit 4b5eb3c

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

js/src/tab.js

+6-1
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,12 @@ class Tab {
187187
element.classList.add(CLASS_NAME_SHOW)
188188
}
189189

190-
if (element.parentNode && $(element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {
190+
let parent = element.parentNode
191+
if (parent && parent.nodeName === 'LI') {
192+
parent = parent.parentNode
193+
}
194+
195+
if (parent && $(parent).hasClass(CLASS_NAME_DROPDOWN_MENU)) {
191196
const dropdownElement = $(element).closest(SELECTOR_DROPDOWN)[0]
192197

193198
if (dropdownElement) {

js/tests/unit/tab.js

+22
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,28 @@ $(function () {
345345
assert.notOk($tabs.find('li:last-child .dropdown-menu a:first-child').hasClass('active'))
346346
})
347347

348+
QUnit.test('should support li > .dropdown-item', function (assert) {
349+
assert.expect(2)
350+
var tabsHTML = [
351+
'<ul class="nav nav-tabs">',
352+
' <li class="nav-item"><a class="nav-link active" href="#home" data-toggle="tab">Home</a></li>',
353+
' <li class="nav-item"><a class="nav-link" href="#profile" data-toggle="tab">Profile</a></li>',
354+
' <li class="nav-item dropdown">',
355+
' <a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#">Dropdown</a>',
356+
' <ul class="dropdown-menu">',
357+
' <li><a class="dropdown-item" href="#dropdown1" id="dropdown1-tab" data-toggle="tab">@fat</a></li>',
358+
' <li><a class="dropdown-item" href="#dropdown2" id="dropdown2-tab" data-toggle="tab">@mdo</a></li>',
359+
' </ul>',
360+
' </li>',
361+
'</ul>'
362+
].join('')
363+
var $tabs = $(tabsHTML).appendTo('#qunit-fixture')
364+
365+
$tabs.find('.dropdown-item').trigger('click')
366+
assert.ok($tabs.find('.dropdown-item').hasClass('active'))
367+
assert.notOk($tabs.find('.nav-link:not(.dropdown-toggle)').hasClass('active'))
368+
})
369+
348370
QUnit.test('Nested tabs', function (assert) {
349371
assert.expect(2)
350372
var done = assert.async()

0 commit comments

Comments
 (0)