Аналог closest в jQuery
Ребята есть строка
if ( $( event.target ).closest( '.popul' ).length ) return; Вообщем она позволяет отменять закрытие блока при клике на нем, т.е при клике по предкам блока с классом popul. Как будет выглядить аналог на чистом JS? |
function closest(target, selector) {
while (target) {
if (target.matches && target.matches(selector)) return target;
target = target.parentNode;
}
return null;
}
if (closest(event.target, '.popul')) return;
|
что-то не так - не работает. что такое matches?
|
Цитата:
|
понятно, но почему-то при клике на обьект с классом .popul, все равно окошко закрывается, у вас работает нормально?
|
Phonixe,
:write: вариант закрытия по клику вне элемента без jQuery
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
.popul{
background-color: #008000;
width: 150px;
height: 150px;
}
</style>
</head>
<body><div class="nopopul"><h1>This is the element!</h1></div>
<div class="popul"><h1>This is the test!</h1></div>
<script type="text/javascript">
var doc = document;
doc.onclick = function(event) {
event = event || window.event;
var target = event.target || event.srcElement;
while (target != doc) {
if (/(^|\s)popul(\s|$)/.test(target.className)) {
return;
}
target = target.parentNode;
}
document.querySelector('.popul').style.backgroundColor = 'red' //close
} </script>
</body>
</html>
|
лучше вот такой регекс:
/(^|\s)popul(\s|$)/ а то, например, "popul-popul" тоже матчится |
чет я не понимаю, чем не устраивает вариант с .matches? Кроссбраузерность? Дык выше по ссылке что я дал, описано как это решить.
|
Цитата:
|
Яростный Меч,
ок |
| Часовой пояс GMT +3, время: 23:36. |