单击后在 HTML 页面中查找外部元素
Find outer element in HTML page after click
我正在尝试获取包含多个可以单击的按钮的相应元素。例如,我想获取包含已单击按钮的 table 行。
在下面的代码中,单击会调用相应的 JavaScript,但 "closest" returns 对象不是 table 行之一。我也试过 event.target
而不是这个, parents
而不是 closest
但 none 确实有效。
$(".ok").on("click", function(event) {
console.log("ok clicked! " + JSON.stringify(event));
var row = $(this).closest("tr");
console.log("event = " + event.target.nodeName);
console.log("outer type = " + typeof(row));
console.log("outer id = " + row.id);
console.log("outer = " + JSON.stringify(row));
});
<table>
<tr class="outer" id="id-1">
<td>
<button type="button" class="ok">B1</button>
</td>
</tr>
<tr class="outer" id="id-2">
<td>
<button type="button" class="ok">B2</button>
</td>
</tr>
</table>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.3.1/dist/jquery.min.js"></script>
您可以使用 jquery 的 parent.parent 方法来查找行,即 tr
$(document).ready(function(){
$(".ok").on( "click", function( event ) {
var row = $(this).parent().parent();
console.log("event = "+event.target.nodeName);
console.log("outer type = "+typeof(row));
console.log("outer id = "+row.attr("id"));
console.log("outer = "+JSON.stringify(row));
});
})
<!doctype html>
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.3.1/dist/jquery.min.js"></script>
</head>
<body>
<table>
<tr class="outer" id="id-1">
<td>
<button type="button" class="ok">B1</button>
</td>
</tr>
<tr class="outer" id="id-2">
<td>
<button type="button" class="ok">B2</button>
</td>
</tr>
</table>
</body>
</html>
通过使用 closest ,您会收到一个数组作为返回值,如果您只记录 closest 就可以看到这一点。
您必须访问第一个索引才能获得您正在寻找的最接近的元素。
$(".ok").on("click", function(event) {
console.log("ok clicked! " + JSON.stringify(event));
var row = $(this).closest("tr")[0];
console.log("outer id = " + row.id);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tr class="outer" id="id-1">
<td>
<button type="button" class="ok">B1</button>
</td>
</tr>
<tr class="outer" id="id-2">
<td>
<button type="button" class="ok">B2</button>
</td>
</tr>
</table>
我正在尝试获取包含多个可以单击的按钮的相应元素。例如,我想获取包含已单击按钮的 table 行。
在下面的代码中,单击会调用相应的 JavaScript,但 "closest" returns 对象不是 table 行之一。我也试过 event.target
而不是这个, parents
而不是 closest
但 none 确实有效。
$(".ok").on("click", function(event) {
console.log("ok clicked! " + JSON.stringify(event));
var row = $(this).closest("tr");
console.log("event = " + event.target.nodeName);
console.log("outer type = " + typeof(row));
console.log("outer id = " + row.id);
console.log("outer = " + JSON.stringify(row));
});
<table>
<tr class="outer" id="id-1">
<td>
<button type="button" class="ok">B1</button>
</td>
</tr>
<tr class="outer" id="id-2">
<td>
<button type="button" class="ok">B2</button>
</td>
</tr>
</table>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.3.1/dist/jquery.min.js"></script>
您可以使用 jquery 的 parent.parent 方法来查找行,即 tr
$(document).ready(function(){
$(".ok").on( "click", function( event ) {
var row = $(this).parent().parent();
console.log("event = "+event.target.nodeName);
console.log("outer type = "+typeof(row));
console.log("outer id = "+row.attr("id"));
console.log("outer = "+JSON.stringify(row));
});
})
<!doctype html>
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.3.1/dist/jquery.min.js"></script>
</head>
<body>
<table>
<tr class="outer" id="id-1">
<td>
<button type="button" class="ok">B1</button>
</td>
</tr>
<tr class="outer" id="id-2">
<td>
<button type="button" class="ok">B2</button>
</td>
</tr>
</table>
</body>
</html>
通过使用 closest ,您会收到一个数组作为返回值,如果您只记录 closest 就可以看到这一点。 您必须访问第一个索引才能获得您正在寻找的最接近的元素。
$(".ok").on("click", function(event) {
console.log("ok clicked! " + JSON.stringify(event));
var row = $(this).closest("tr")[0];
console.log("outer id = " + row.id);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tr class="outer" id="id-1">
<td>
<button type="button" class="ok">B1</button>
</td>
</tr>
<tr class="outer" id="id-2">
<td>
<button type="button" class="ok">B2</button>
</td>
</tr>
</table>