Thuộc tính path
của Event
đối tượng không chuẩn. Tương đương chuẩn là composedPath
, là một phương pháp. Nhưng nó mới.
Vì vậy, bạn có thể muốn thử té ngửa ra rằng, ví dụ:
var path = event.path || (event.composedPath && event.composedPath());
if (path) {
// You got some path information
} else {
// This browser doesn't supply path information
}
Rõ ràng rằng sẽ không cung cấp cho bạn thông tin đường dẫn nếu trình duyệt không cung cấp nó, nhưng nó cho phép cả hai theo cách cũ và cách thức tiêu chuẩn mới, và như vậy sẽ làm trình duyệt chéo tốt nhất của nó.
Ví dụ:
document.getElementById("target").addEventListener("click", function(e) {
// Just for demonstration purposes
if (e.path) {
console.log("Supports `path`");
} else if (e.composedPath) {
console.log("Supports `composedPath`");
} else {
console.log("Supports neither `path` nor `composedPath`");
}
// Per the above, get the path if we can
var path = e.path || (e.composedPath && e.composedPath());
// Show it if we got it
if (path) {
console.log("Path (" + path.length + ")");
Array.prototype.forEach.call(
path,
function(entry) {
console.log(entry.nodeName);
}
);
}
}, false);
<div id="target">Click me</div>
Trong các thử nghiệm của tôi, Firefox và IE11 không hỗ trợ hoặc path
hoặc composedPath
. Chrome hỗ trợ path
(đó là ý tưởng ban đầu của Google) nhưng chưa (chưa) composedPath
.
Vì vậy, tôi không nghĩ rằng bạn có thể lấy thông tin đường dẫn trên Firefox hoặc IE11. (Bạn đã không kiểm tra Edge.) Bạn có thể, rõ ràng, lấy đường dẫn qua e.target.parentNode
và mỗi tiếp theo parentNode
, đó là thường giống nhau, nhưng tất nhiên điểm path
/composedPath
là nó không luôn như nhau (nếu điều gì đó sửa đổi DOM sau khi sự kiện được kích hoạt nhưng trước khi trình xử lý của bạn được gọi).
Nguồn
2016-08-31 09:23:14
thế nào có thể câu hỏi này có 3 xuống phiếu mà không cần bất kỳ bình luận ... – icl7126