我想在我点击的HTML文档中获得当前元素(无论那是什么元素)。我正在使用:

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

但非常奇怪的是,我得到的是整个(!)文档的文本,而不是单击的元素。

如何只得到我点击的元素?

例子

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

如果我点击“测试”文本,我希望能够阅读属性与jQuery $(this).attr(“myclass”)。


当前回答

你需要使用事件。目标,即最初触发事件的元素。示例代码中的this指的是文档。

在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);

此外,如果您需要支持< IE9,请确保使用attachEvent()而不是addEventListener()。

其他回答

下面是一个使用jQuery选择器的解决方案,这样你就可以轻松地瞄准任何类、ID、类型等标签。

jQuery('div').on('click', function(){
    var node = jQuery(this).get(0);
    var range = document.createRange();
    range.selectNodeContents( node );
    window.getSelection().removeAllRanges();
    window.getSelection().addRange( range );
});

使用delegate和event.target。委托通过让一个元素监听并处理子元素上的事件来利用事件冒泡。target是事件对象的jq规范化属性,表示事件起源于的对象。

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

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

你需要使用事件。目标,即最初触发事件的元素。示例代码中的this指的是文档。

在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);

此外,如果您需要支持< IE9,请确保使用attachEvent()而不是addEventListener()。

调用函数时传递"this"作为参数:

< script src = " https://cdnjs.cloudflare.com/ajax/libs/jquery/1.10.1/jquery.min.js " > < /脚本> < span onclick = " click_here(这个);“>点击< / span > <脚本> 函数click_here (elmnt) { 警报($ (elmnt)。text ()); } > < /脚本

这是javascript中最简单的获取点击元素的方式。

window.addEventListener('click', (e) => console.log(e.target));