У меня есть прослушиватель событий, прикрепленный к контейнеру, и я хочу фильтровать то, что нажали.Событие bubbling with querySelector
В приведенном ниже примере я отфильтровываю UL.head
кликов.
<div>
<ul class="head">
<li data-test="...">1</li>
<li>2</li>
<li>3</li>
</ul>
<ul class="head">
<li>1</li>
<li>2</li>
<li data-test="...">3</li>
</ul>
<ul class="head">
<li>1</li>
<li data-test="...">2</li>
<li>3</li>
</ul>
</div>
document.querySelector('div').addEventListener('click', function(e) {
var ul = findParentByClass(e.target, ".head");
if(ul) { // clicke a UL }
});
function findParentByClass(node, cls) {
while (node && !hasClass(node, cls)) {
node = node.parentNode;
}
return node;
}
Я хотел воспроизвести аналогичную функцию в findParentByClass
, но это было бы findParentByQuerySelector
. Так что я мог бы сделать что-то вроде:
li = findParentByQuerySelector('li:[data-test]');
if(li) { // clicked li with data-test attribute }
Я проковылял о том, как я мог бы реализовать querySelector
в это событие барботажа.
Как это непоследовательно? – ditto
@ditto прочитал документацию, связанную мной; не все браузеры реализуют это, а некоторые реализуют его под другим именем. – Hamms
@ditto. Первоначально он был реализован с префиксами поставщиков: «mozMatchesSelector», «msMatchesSelector», «oMatchesSelector», 'webkitMatchesSelector'. Вы можете нормализовать поведение с этим полифоном https://gist.github.com/elijahmanor/6452535 – Duopixel