Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.08.2022, 20:54
Интересующийся
Отправить личное сообщение для Neznajka Посмотреть профиль Найти все сообщения от Neznajka
 
Регистрация: 26.07.2022
Сообщений: 26

Определить номер кликнутой строки в ячейке
Приветствую всех!
Можно ли с помощью 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>
Ответить с цитированием
  #2 (permalink)  
Старый 03.08.2022, 21:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

индекс строки по клику
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>

Последний раз редактировалось рони, 03.08.2022 в 21:31.
Ответить с цитированием
  #3 (permalink)  
Старый 03.08.2022, 22:57
Интересующийся
Отправить личное сообщение для Neznajka Посмотреть профиль Найти все сообщения от Neznajka
 
Регистрация: 26.07.2022
Сообщений: 26

To рони:
Великолепно! Спасибо большое! Я, честно говоря, не думал, что это вообще можно сделать. А можно ли это как-то "перевести" на JQuery, чтобы впихнуть в
$('document').ready(function(){...}
?
Ответить с цитированием
  #4 (permalink)  
Старый 04.08.2022, 00:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от Neznajka
А можно ли это как-то "перевести" на JQuery, чтобы впихнуть в
можно, но зачем?
<!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>
Ответить с цитированием
  #5 (permalink)  
Старый 04.08.2022, 09:38
Интересующийся
Отправить личное сообщение для Neznajka Посмотреть профиль Найти все сообщения от Neznajka
 
Регистрация: 26.07.2022
Сообщений: 26

To рони:
Большущее спасибо! На Вашем коде приятно учиться.
А о "переводе" на JQuery - мне его синтаксис более понятен (ибо, например, function({target}) взрывает мозг. Ну, и вторая причина - мне легче организовать дальнейшую обработку щёлкнутого номера строки - мне надо будет подсветить или подчеркнуть строчку с соответствующим номером в соседней ячейке, если в ней таковая строчка существует. Всё это мне легче будет сделать на JQuery - я к нему уже привык, пока создавал другие свои веб-страницы. Например, эту.
Огромное Вам спасибо ещё раз!
Ответить с цитированием
  #6 (permalink)  
Старый 04.08.2022, 14:09
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Neznajka
А о "переводе" на JQuery - мне его синтаксис более понятен (ибо, например, function({target}) взрывает мозг
Синтаксис везде JS.
$('#test').click(function({target}){console.log(target)})
Ответить с цитированием
  #7 (permalink)  
Старый 04.08.2022, 14:21
Интересующийся
Отправить личное сообщение для Neznajka Посмотреть профиль Найти все сообщения от Neznajka
 
Регистрация: 26.07.2022
Сообщений: 26

To ksa:
Ага. Я по этому поводу, было, по началу расстроился - но потом оказалось, что JQuery для многих подобных "выходок" JavaScript'а имеет свои более человеко-понятные альтернативы
Ответить с цитированием
  #8 (permalink)  
Старый 04.08.2022, 14:32
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Neznajka, на сегодняшний день JS получил довольно много инструментов, т.ч. jQ может выиграть только по количеству символов.
document.querySelectorAll('.test')
//
$('.test')
Ответить с цитированием
  #9 (permalink)  
Старый 05.08.2022, 00:10
Интересующийся
Отправить личное сообщение для Neznajka Посмотреть профиль Найти все сообщения от Neznajka
 
Регистрация: 26.07.2022
Сообщений: 26

Ну, хорошо, уговорили - пусть побудет и JavaScript.
(Но - только после JQuery, очевидно)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить из строки число / ноль / строку MC-XOBAHCK Общие вопросы Javascript 7 02.04.2021 16:11
Как определить индекс строки содержащей искомую информацию в 1-м столбце Datatables? izumov jQuery 3 01.02.2020 22:40
Номер строки таблицы Meattale Javascript под браузер 2 08.05.2017 20:12
Как узнать номер столбца по выделенной ячейке tzarek jQuery 1 28.08.2013 16:01
Узнать номер строки таблицы по клику antserg jQuery 4 13.11.2011 13:46