Определить номер кликнутой строки в ячейке
Приветствую всех!
Можно ли с помощью JavaScript/JQuery определить номер кликнутой строки в многострочной ячейке таблицы, если строки разделены через <br/> ? Имею в виду отдельную нумерацию в произвольной ячейке - т.е. без необходимости определять ещё и номер самой ячейки или строки. <table border="1"> <tr> <td> строка 1 <br/> строка 2 <br/> строка 3 </td> <td> пусто </td> </tr> <tr> <td> строка 1 <br/> строка 2 <br/> строка 3 <br/> строка 4 <br/> строка 5 </td> <td> пусто </td> </tr> </table> |
индекс строки по клику
Neznajka,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
</style>
<script>
document.addEventListener("DOMContentLoaded", function() {
let table = document.querySelector("table");
table.addEventListener("click", function({
target
}) {
let selection = document.getSelection(),
node = selection.baseNode;
target = target.closest("td");
if (node.nodeType == 3 && target) {
let childNodes = [...target.childNodes].filter(node => node.nodeType == 3);
let index = childNodes.findIndex(el => el === node);
alert(index);
}
})
})
</script>
</head>
<body>
<table border="1">
<tr>
<td>
строка 1 <br/> строка 2 <br/> строка 3
</td>
<td>
пусто
</td>
</tr>
<tr>
<td>
строка 1 <br/> строка 2 <br/> строка 3 <br/> строка 4 <br/> строка 5
</td>
<td>
пусто
</td>
</tr>
</table>
</body>
</html>
|
To рони:
Великолепно! Спасибо большое! Я, честно говоря, не думал, что это вообще можно сделать. А можно ли это как-то "перевести" на JQuery, чтобы впихнуть в
$('document').ready(function(){...}
? |
Цитата:
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
$(function() {
$("table").on("click", "td", function() {
let array = $(this).contents().filter(function() {
return this.nodeType == 3;
}).get();
let selection = document.getSelection(),
node = selection.baseNode;
let index = $.inArray(node, array);
alert(index);
})
});
</script>
</head>
<body>
<table border="1">
<tr>
<td>
строка 1 <br/> строка 2 <br/> строка 3
</td>
<td>
пусто
</td>
</tr>
<tr>
<td>
строка 1 <br/> строка 2 <br/> строка 3 <br/> строка 4 <br/> строка 5
</td>
<td>
пусто
</td>
</tr>
</table>
</body>
</html>
|
To рони:
Большущее спасибо! На Вашем коде приятно учиться. А о "переводе" на JQuery - мне его синтаксис более понятен (ибо, например, function({target}) взрывает мозг:). Ну, и вторая причина - мне легче организовать дальнейшую обработку щёлкнутого номера строки - мне надо будет подсветить или подчеркнуть строчку с соответствующим номером в соседней ячейке, если в ней таковая строчка существует. Всё это мне легче будет сделать на JQuery - я к нему уже привык, пока создавал другие свои веб-страницы. Например, эту. Огромное Вам спасибо ещё раз! |
Цитата:
$('#test').click(function({target}){console.log(target)})
|
To ksa:
Ага. Я по этому поводу, было, по началу расстроился - но потом оказалось, что JQuery для многих подобных "выходок" JavaScript'а имеет свои более человеко-понятные альтернативы :) |
Neznajka, на сегодняшний день JS получил довольно много инструментов, т.ч. jQ может выиграть только по количеству символов. :)
document.querySelectorAll('.test')
//
$('.test')
|
Ну, хорошо, уговорили - пусть побудет и JavaScript. :)
(Но - только после JQuery, очевидно) :) |
| Часовой пояс GMT +3, время: 09:00. |