クリックをキャプチャするグローバル関数があります。
$(document).click(function(e){
//do something
if(clickedOnLink)
//do something
});
ターゲットがリンクの場合は追加の操作を行いたいのですが、<a>
タグが実際に div を囲んでいる場合 (HTML5 で許可されているため)、ターゲットはその div になります。
クリックをキャプチャするグローバル関数があります。
$(document).click(function(e){
//do something
if(clickedOnLink)
//do something
});
ターゲットがリンクの場合は追加の操作を行いたいのですが、<a>
タグが実際に div を囲んでいる場合 (HTML5 で許可されているため)、ターゲットはその div になります。
<a>
クリックした要素がタグの子であるかどうかを確認できます。
$(document).click(function(e){
if($(e.target).closest('a').length){
alert('You clicked a link');
}
else{
alert('You did not click a link');
}
});
を使用is
すると、実際には、回答が示唆するよりも優れたパフォーマンスが得られると思いclosest
ます。
$(e.target).is('a, a *');
a
これは、要素自体が であるか、または に含まれているかどうかをチェックしa
ます。
これは、要素自体で一致closest
を使用し、DOM ツリーをたどる必要がないため、より高速になるはずです。closest
これを試して
$(document).click(function(e){
//do something
if($(this).closest('a').length)
//do something
});
jquery では、tagName 属性 $("a").prop("tagName"); を取得するだけです。
更新: ターゲットが a であるか、親が a であるかを確認できます。
$(function () {
$(document).on('click', function (e) {
$target = $(e.target);
if ($target.closest('a').length > 0) {
alert('i am an a');
}
});
});
の中に何かがあるかどうかをテストすることで、<div>
アンダーがあるかどうかをテストできます。内部に何もない場合、または がない場合、ステートメントは を返します。<a>
.children()
<div>
<div>
if
false
このコードをお勧めします:
$(document).click(function(e){
var willRedirect = ($('a[href="/"]').attr('href').indexOf('#') == -1 ? true : false),
//run code
if ( willRedirect === false ){
e.preventDefault();
//the link will not redirect
if ( $(this).children('div').html() ){
//there is a <div> inside <a> containing something
}
else {
//there is no <div> inside <a>
}
}
else {
//the link is not pointing to your site
}
});