我有一个全局函数来捕获点击事件。
$(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
更快,因为它将在元素本身上使用matches,而不需要像closest
那样遍历DOM树。
.is('a *')
到底是做什么的? - XCSmatches
的非常旧的浏览器上,您可能无法看到性能方面的显着差异。 - James Montagne试试这个
$(document).click(function(e){
//do something
if($(this).closest('a').length)
//do something
});
.is()
方法。$(".element").on("click", function(e){
if($(e.target).is("a")){
//do your stuff
}
});
编辑:
如果它被其他元素包围且在锚点标签内,那么您可以使用 closest()
并通过使用 length
检查它是否有锚点标签父级。
示例:
$(".element").on("click", function(e){
if($(e.target).closest("a").length){
//do your stuff
}
});
a
标签内部。 - XCS使用jQuery获取tagName属性 $("a").prop("tagName");
$(function () {
$(document).on('click', function (e) {
$target = $(e.target);
if ($target.closest('a').length > 0) {
alert('i am an a');
}
});
});
$target
是 <a>
,那么 .closest
将返回它。所以你只需要 $target.closest('a').length > 0
,不需要检查 .is
。 - gen_Eric您可以测试是否在 <a>
下有一个 <div>
通过测试 .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
}
});
id
的元素,因此与:target
伪选择器匹配,还是指被点击以触发导航的元素? - David Thomas<a>
标签内部放置<div>
是无效的HTML。 - gen_Eric<a>
可以包裹块元素。http://dev.w3.org/html5/markup/a.html#a-changes - XCSa
元素($('a')
)上,则它会告诉您它是一个链接,因为click
会通过文档冒泡。 - David Thomas