如何点击元素(对于整个文档)?

IT技术 javascript jquery html dom
2021-01-18 08:17:15

我想在我单击的 HTML 文档中获取当前元素(无论是什么元素)。我在用:

$(document).click(function () {
    alert($(this).text());
});

但很奇怪,我得到了整个(!)文档的文本,而不是被点击的元素。

如何只获取我点击的元素?

例子

<body>
    <div class="myclass">test</div>
    <p>asdfasfasf</p>
</body>

如果我单击“测试”文本,我希望能够$(this).attr("myclass"在 jQuery 中使用)读取属性

6个回答

您需要使用event.targetwhich 是最初触发事件的元素。this您的示例代码指document

在 jQuery 中,这是...

$(document).click(function(event) {
    var text = $(event.target).text();
});

没有jQuery...

document.addEventListener('click', function(e) {
    e = e || window.event;
    var target = e.target || e.srcElement,
        text = target.textContent || target.innerText;   
}, false);

另外,请确保您是否需要支持 < IE9attachEvent()而不是addEventListener().

@alex 嘿,应该是|| target.innerText吗?
2021-03-15 08:17:15
我一直在 Safari 中寻找解决方法 3 天,我终于偶然发现了这篇文章。你们摇滚谢谢
2021-03-27 08:17:15
我发现返回的元素在某种程度上略有不同,所以我不能做if(event.target === myjQueryDivElement)我必须做的:if(event.target.hasClass('mydivclass'))其中 mydivclass 是我的元素具有的类。
2021-04-12 08:17:15

event.target 得到 element

window.onclick = e => {
    console.log(e.target);  // to get the element
    console.log(e.target.tagName);  // to get the element tag name alone
} 

从被点击的元素中获取文本

window.onclick = e => {
    console.log(e.target.innerText);
} 
如果没有,大多数情况下只会返回 body 标签
2021-03-18 08:17:15
e.target 返回子点击元素。如果一个按钮有一个孩子,你不会得到按钮,而是被点击的孩子。
2021-03-21 08:17:15
对于右键单击 - 而不是 onclick 添加 oncontextmenu
2021-03-27 08:17:15
我来这里是为了右键单击,所以我尝试了右键单击,但是没有用。
2021-04-06 08:17:15

在 body 标签中使用以下内容

<body onclick="theFunction(event)">

然后在javascript中使用以下函数来获取ID

<script>
function theFunction(e)
{ alert(e.target.id);}

您可以在event.target以下位置找到目标元素

$(document).click(function(event) {
    console.log($(event.target).text());
});

参考:

使用delegateevent.targetdelegate通过让一个元素侦听和处理子元素上的事件来利用事件冒泡。targetevent表示事件源自的对象对象的 jQ 归一化属性

$(document).delegate('*', 'click', function (event) {
    // event.target is the element
    // $(event.target).text() gets its text
});

演示:http : //jsfiddle.net/xXTbP/

好决定。在我的日常工作中,我们还没有升级到最新的 jQuery,所以on我忘记了。
2021-03-17 08:17:15
@alex,因为无论如何事件都在冒泡,而且由于处理程序无论如何都必须运行,所以它并不是真正的例外,是吗?只是没有什么不同而已。不过,我想delegate确实需要考虑过滤开销...
2021-03-18 08:17:15
应该提在这个on()应该推荐过的时代delegate()此外,document可能是唯一不使用delegate()/ 的例外,on()因为它们无论如何都会冒泡到处理的最高点。
2021-03-27 08:17:15