Tôi có thể sử dụng thuộc tính nào với event.target?


91

Tôi cần xác định các yếu tố mà từ đó các sự kiện được kích hoạt.

Sử dụng event.targetnhận được phần tử tương ứng.

Tôi có thể sử dụng những thuộc tính nào từ đó?

  • href
  • Tôi
  • Tên nút

Tôi không thể tìm thấy nhiều thông tin về nó, ngay cả trên các trang jQuery , vì vậy tôi hy vọng ai đó có thể hoàn thành danh sách trên.

BIÊN TẬP:

Những điều này có thể hữu ích: thuộc tính nút selfHTMLthuộc tính HTML selfHTML

Câu trả lời:


41

event.targettrả về phần tử DOM, vì vậy bạn có thể truy xuất bất kỳ thuộc tính / thuộc tính nào có giá trị; vì vậy, để trả lời câu hỏi của bạn cụ thể hơn, bạn sẽ luôn có thể truy xuất nodeNamevà bạn có thể truy xuất hrefid, miễn là phần tử a hrefidđược xác định; nếu không undefinedsẽ được trả lại.

Tuy nhiên, bên trong trình xử lý sự kiện, bạn có thể sử dụng this, được đặt thành phần tử DOM; dễ dàng hơn nhiều.

$('foo').bind('click', function () {
    // inside here, `this` will refer to the foo that was clicked
});

Ah. cảm ơn! Tôi đang đưa ra các liên kết, hiển thị các thuộc tính có sẵn.
thường xuyên

2
"this" sẽ tham chiếu đến "foo" hay "event.target"? Nếu tôi đang nghe scrollStart trên tài liệu và scrollStart được kích hoạt trên phần tử H1, làm cách nào tôi có thể lấy H1?
thường xuyên

@frequent - câu trả lời Richards dưới đây cho thấy rằng bạn có thể tìm H1 bằng cách nhìn vào event.target.tagName
Frazer Kirkman

142

Nếu bạn kiểm tra event.targetbằng firebug hoặc các công cụ dành cho nhà phát triển của chrome, bạn sẽ thấy phần tử span (ví dụ: các thuộc tính sau) nó sẽ có bất kỳ thuộc tính nào mà bất kỳ phần tử nào có. Nó phụ thuộc vào yếu tố mục tiêu là gì:

event.target: HTMLSpanElement

attributes: NamedNodeMap
baseURI: "file:///C:/Test.html"
childElementCount: 0
childNodes: NodeList[1]
children: HTMLCollection[0]
classList: DOMTokenList
className: ""
clientHeight: 36
clientLeft: 1
clientTop: 1
clientWidth: 1443
contentEditable: "inherit"
dataset: DOMStringMap
dir: ""
draggable: false
firstChild: Text
firstElementChild: null
hidden: false
id: ""
innerHTML: "click"
innerText: "click"
isContentEditable: false
lang: ""
lastChild: Text
lastElementChild: null
localName: "span"
namespaceURI: "http://www.w3.org/1999/xhtml"
nextElementSibling: null
nextSibling: null
nodeName: "SPAN"
nodeType: 1
nodeValue: null
offsetHeight: 38
offsetLeft: 26
offsetParent: HTMLBodyElement
offsetTop: 62
offsetWidth: 1445
onabort: null
onbeforecopy: null
onbeforecut: null
onbeforepaste: null
onblur: null
onchange: null
onclick: null
oncontextmenu: null
oncopy: null
oncut: null
ondblclick: null
ondrag: null
ondragend: null
ondragenter: null
ondragleave: null
ondragover: null
ondragstart: null
ondrop: null
onerror: null
onfocus: null
oninput: null
oninvalid: null
onkeydown: null
onkeypress: null
onkeyup: null
onload: null
onmousedown: null
onmousemove: null
onmouseout: null
onmouseover: null
onmouseup: null
onmousewheel: null
onpaste: null
onreset: null
onscroll: null
onsearch: null
onselect: null
onselectstart: null
onsubmit: null
onwebkitfullscreenchange: null
outerHTML: "<span>click</span>"
outerText: "click"
ownerDocument: HTMLDocument
parentElement: HTMLElement
parentNode: HTMLElement
prefix: null
previousElementSibling: null
previousSibling: null
scrollHeight: 36
scrollLeft: 0
scrollTop: 0
scrollWidth: 1443
spellcheck: true
style: CSSStyleDeclaration
tabIndex: -1
tagName: "SPAN"
textContent: "click"
title: ""
webkitdropzone: ""
__proto__: HTMLSpanElement

22
Theo như tôi biết, chrome không còn in các phần tử DOM ra như thế này khi sử dụng console.log. Bạn phải sử dụng console.dir để thay thế.
Astridax

vâng, nó không quá tệ!

19
window.onclick = e => {
    console.dir(e.target);  // use this in chrome
    console.log(e.target);  // use this in firefox - click on tag name to view 
}  

nhập mô tả hình ảnh ở đây

tận dụng lợi thế của việc sử dụng các bộ lọc


e.target.tagName
e.target.className
e.target.style.height  // its not the value applied from the css style sheet, to get that values use `getComputedStyle()`

1
<thuộc tính> Tên ... tại sao trên thế giới không ai khác ngoài bạn nói câu trả lời đơn giản này?
karthikeayan

7

event.targettrả về nút được nhắm mục tiêu bởi hàm. Điều này có nghĩa là bạn có thể làm bất cứ điều gì bạn muốn với bất kỳ nút nào khác giống như nút bạn nhận được từdocument.getElementById

Tôi đã thử với jQuery

var _target = e.target;
console.log(_target.attr('href'));

Trả lại một lỗi:

.attr không phải hàm

Nhưng _target.attributes.href.valuelà công việc.


10
Đó là vì e.targetkhông phải là một đối tượng jQuery và .attr()là phương thức của jQuery. Nếu bạn đã thử __target.getAttribute('href');nó sẽ hoạt động tốt.
kano

2

event.targettrả về nút được nhắm mục tiêu bởi hàm. Điều này có nghĩa là bạn có thể làm bất cứ điều gì bạn muốn làm với bất kỳ nút nào khác giống như nút bạn nhận được từdocument.getElementById


1

Một cách dễ dàng để xem tất cả các thuộc tính trên một nút DOM cụ thể trong Chrome (tôi đang sử dụng phiên bản 69) là nhấp chuột phải vào phần tử, chọn kiểm tra, sau đó thay vì xem tab "Kiểu", hãy nhấp vào "Thuộc tính" .

Bên trong tab Thuộc tính, bạn sẽ thấy tất cả các thuộc tính cho phần tử cụ thể của mình.


đáng nói là bảng điều khiển này hiện không được dùng nữa để thay thế cho console.dir. Trên Chrome 85
ivanji

0
//Do it like---
function dragStart(this_,event) {
    var row=$(this_).attr('whatever');
    event.dataTransfer.setData("Text", row);
}

3
Câu hỏi này đã được trả lời và nhiều phiếu ủng hộ được đặt cho những câu trả lời này. Theo cách nào thì câu trả lời của bạn tốt hơn? Bạn vui lòng giải thích giải pháp của bạn?
Chất lượng Catalyst
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.