2017-07-20 8 views
0

クリックが特定の階層内の要素にあるかどうかをテストします。クリックした要素が子/子孫の場合はjsテスト

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

が、私は配列にすべての要素を置くことができ、その後私は、テストの権利を取得することはできません:

使用して、私はこれを正しく行うにはどうすればよい

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

をしてください?おかげで...

(私は表示情報以外の体に何時にクリックすると、それを閉じますクリック離れて関数を作成しようとしていますPS)

答えて

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>

+0

<<!dialog.contains(e.target)>>これはすべてが正しく動作するために必要なスニペットでした...私が作っていたよりもずっと簡単でした。 ! – Gulli

+0

ようこそ。 – PeterMader

0

あなたはアンダーの機能が含まれて使用することができます。だから、あなたの条件は、その場合には次のようになります。

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

を次のように試してみてください。

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

'Node'を行うとき以来'子どもの方法がありますか? – PeterMader

関連する問題