クリックしたHTMLドキュメントの現在の要素(要素が何であれ)を取得したい。使ってます:
$(document).click(function () {
alert($(this).text());
});
しかし、非常に奇妙なことに、クリックされた要素ではなく、ドキュメント全体のテキストを取得します。
クリックした要素のみを取得する方法は?
<body>
<div class="myclass">test</div>
<p>asdfasfasf</p>
</body>
「テスト」テキストをクリックすると、jQueryの$(this).attr("myclass"
)で属性を読み取れるようになります。
event.target
を使用する必要があります。これは元々イベントをトリガーした要素です。サンプルコードの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);
また、attachEvent()
の代わりにaddEventListener()
を使用する<IE9をサポートする必要があるかどうかを確認してください。
bodyタグ内で次を使用します
<body onclick="theFunction(event)">
次に、javascriptで次の関数を使用してIDを取得します
<script>
function theFunction(e)
{ alert(e.target.id);}
window.onclick = e => {
console.log(e.target);
console.log(e.target.tagName);
}
クリックされた要素からテキストを取得する
window.onclick = e => {
console.log(e.target.innerText);
}
ターゲット要素は event.target
で見つけることができます:
$(document).click(function(event) {
console.log($(event.target).text());
});
参照:
delegate
および event.target
を使用します。 delegate
は、1つの要素が子要素のイベントをリッスンして処理できるようにすることで、イベントバブリングを利用します。 target
は、event
オブジェクトのjQ正規化プロパティで、イベントの発生元のオブジェクトを表します。
$(document).delegate('*', 'click', function (event) {
// event.target is the element
// $(event.target).text() gets its text
});
$(document).click(function (e) {
alert($(e.target).text());
});