2015-03-21 3 views
0

Я хочу выбрать элемент, имеющий определенный класс, но без определенного класса. Вы бы сделать это с прохладной селектор CSS3Javascript: получить элемент по классу, но пропустить определенный класс

self.tabs.querySelector('.active:not(.dropdown)') 

, но это не будет работать в IE9-, так что я искал что-то вроде этого

self.tabs.querySelector('.active') && !self.tabs.querySelector('.dropdown') 

Спасибо за любые предложения.

+1

Если нет селектора, я бы предположил, что вы просто фильтруете результаты в цикле на основе классов, которые у них есть. – m0meni

+4

: не псевдоселектор должен работать в IE9 + [https://developer.mozilla.org/en-US/docs/Web/CSS/:not](https://developer.mozilla.org/en-US/ Docs/Web/CSS /: нет). Если вам нужно поддерживать pre-IE9, вам придется фильтровать в js, как сказал предыдущий плакат. –

+1

Это зависит от того, что вам нужно сделать, но я согласен с тем, что @ AR7 сначала получает необходимый элемент в коллекции, а затем прокручивает их, чтобы получить нужную вам коллекцию с помощью JQuery .hasClass ('dropdown'). Опять же, селектор не должен работать в IE9. –

ответ

0

Для этого конкретного случая, для переключения вкладок, нам не нужен цикл для фильтрации точного элемента, который нам нужен, потому что никогда не будет больше, чем 2 active элементов, и этого достаточно, чтобы использовать только одноуровневую навигацию. Итак, чтобы подвести итог, код будет выглядеть так.

var activeTabs = self.tabs.querySelectorAll('.active'); 
if (activeTabs.length === 1 && !activeTabs[0].classList.contains('dropdown')) { 
    return activeTabs[0] 
} else if (activeTabs.length > 1) { 
    return activeTabs[1] 
// or return activeTabs[activeTabs.length-1] 
// in case we need the exact item that is relevant to the tab content and is on even deeper level 
} 

Надеюсь, это поможет кому-то.

Смежные вопросы