js测试点击元素是否为子/后代

时间:2017-07-20 12:08:55

标签: javascript arrays

我想测试点击是否在特定层次结构中的元素上。

使用:

var elements = parentElement.getElementsByTagName("*");

我可以将所有元素放入数组中,但是我无法正确地进行测试:

function isClicked(e){
    if(elements.indexOf(e.target) != -1){
        //do something
    }
};

我该怎么做呢?感谢...

(PS我正在尝试创建一个点击离开功能,点击身体中的任何内容除了显示的信息将关闭它)

3 个答案:

答案 0 :(得分:0)

您可以使用Underscore的包含功能。所以,你的情况应该是这样的:

if (_.contains(elements, e)) {
  // ...
}

答案 1 :(得分:0)

尝试以下内容:

function isClicked(e){
    //check e.currentTarget.children()
};

答案 2 :(得分:0)

使用Node.prototype.contains



var button = document.querySelector('button');
var dialog = document.querySelector('.dialog');

button.addEventListener('click', function () {
  dialog.classList.add('open');
});

document.body.addEventListener('click', function (e) {
  if (button !== e.target && dialog !== e.target && !dialog.contains(e.target)) {
    dialog.classList.remove('open');
  }
});

.dialog:not(.open) {
  display: none;
}

.dialog {
  background-color: yellow;
}

span {
  color: red;
}

<button>Open dialog</button>
<div class="dialog">
  <h1>Hello, World!</h1>
  <p>Hello, World! <span>Nested element<span></p>
</div>

<p>Click somewhere here to close the dialog! <span>Nested element</span></p>
&#13;
&#13;
&#13;