Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Подсчет символов в <th></th> (https://javascript.ru/forum/misc/69891-podschet-simvolov-v-th-th.html)

Sayler91 25.07.2017 18:49

Подсчет символов в <th></th>
 
Доброе время суток. Подскажите как посчитать количество символов (включая пробелы) в Ячейках 2 и 4. И если эта сумма будет превышать больше 10 символов, эти ячейки буду закрашены красным цветом.
<table class="form-table from-table_size_sm">
<tbody>
<tr><th style="width: 150px;">Ячейка 1</th><td><div class="model-value">123456</div></td>
<td class="form-table__gutter">&nbsp;</td><th>Ячейка 2</th><td><div class="model-value">78 9456 123</div></td>
<td class="form-table__gutter">&nbsp;</td></tr><tr><th style="width: 150px;">Ячейка 3</th><td><div class="model-value">а б вг-д</div></td>
<td class="form-table__gutter">&nbsp;</td><th>Ячейка 4</th><td><div class="model-value">11-11-11</div></td></tr>
</tbody>
</table>

laimas 25.07.2017 19:19

Куда пропала ячейка во второй строке?

$('.form-table tr').children(':nth-child(4)').css('background-color', function() {
    return this.textContent.length > 10 ? '#f00' : '#fff'
})

Sayler91 25.07.2017 19:47

Цитата:

Сообщение от laimas (Сообщение 459583)
Куда пропала ячейка во второй строке?

$('.form-table tr').children(':nth-child(4)').css('background-color', function() {
    return this.textContent.length > 10 ? '#f00' : '#fff'
})

Вроде все на месте. У меня есть массив данных, как мне найти именно в группах <th>Ячейка 2</th> и <th>Ячейка 4</th>? Для этого примера хорошо подходит, но мне нужно более универсальное.

laimas 25.07.2017 19:53

Цитата:

Сообщение от Sayler91
Вроде все на месте.

Точно? В первой строке 6 ячеек, во второй 5. Код написан так небрежно, что черт ногу сломает, что-то не доглядеть просто.

Цитата:

Сообщение от Sayler91
но мне нужно более универсальное

А что значит универсальное? Код не сможет догадаться чего от него хотят, пока ему конкретно не описать задачу.

Sayler91 25.07.2017 20:12

Извините, но я не до конца понимаю. Я сохранил этот код в html формате и получил 8 ячеек. Мне же нужно посчитать "78 9456 123" и "11-11-11", а они находятся в группе "Ячейка 2" и "Ячейка 4" соответственно.Как искать по коду именно <th>Ячейка 2</th> и <th>Ячейка 4</th>? Простите мою неосведомленность :-?

laimas 25.07.2017 21:00

Цитата:

Сообщение от Sayler91
Мне же нужно посчитать "78 9456 123" и "11-11-11", а они находятся в группе "Ячейка 2" и "Ячейка 4" соответственно.

А что есть группа? Есть для таблиц colgroup, это можно определить, а по каким критериям можно понять, что некая запись в какой-то ячейке (или сама ячейка) определяет группу из N ячеек? Да еще и о универсальности речь шла.

Sayler91 25.07.2017 21:37

<body>
    <table class="form-table from-table_size_sm">
<tbody>
<tr>
	<th>Имя</th><td><div class="model-value">Иван</div></td>
	<td class="form-table__gutter">&nbsp;</td><th>Имя (лат.)</th><td><div class="model-value">IVAN</div></td>
</tr>
<tr>
	<th>Фамилия</th><td><div class="model-value">Иванович</div></td>
	<td class="form-table__gutter">&nbsp;</td><th>Фамилия на лат.</th><td><div class="model-value">Ivanovich</div></td>
</tr>
</tbody>
</table>


Вот еще пример html. Можно ли создать такое условие? Если в <tr> есть <th> с текстом "Имя", то берется значение <td>.

laimas 25.07.2017 22:26

$('th:contains("Имя")').next()


В данном случае это будет коллекция из двух ячеек <td><div class="model-value">Иван</div></td> и <td><div class="model-value">IVAN</div></td>.

Sayler91 26.07.2017 05:33

Спасибо. Теперь я понял. Зная расположение ячеек, можно ли посчитать количество символов ячеек "Ivan" и "Ivanovich" и поставить условие если их количество будет превышать 10 они изменят цвет на красный?

laimas 26.07.2017 05:35

Ну так сделать тоже самое, что и в первом случае, различие то только в селекторах.

$('th:contains("Имя")').next().css('background-color', function() {
    return this.textContent.length > 10 ? '#f00' : '#fff'
})


PS. textContent поддерживается не всеми браузерами, но это можно заменить на либо innerHTML, либо this.textContent заменить на $(this).text()

PPS. Нет, в данном случае innerHTML применить нельзя, так как он возвращает html содержимое, а ячейки имеют вложенный DIV.

Sayler91 26.07.2017 17:54

Спасибо за ответы. Я наверное буду использовать innerText, так как с ним у меня проблем не было на других браузерах. Но все равно я не смог приделать ваш код. Подскажите тему что вы используете, а именно манипуляции с ячейкой и перевод ее в текстовую переменную?

laimas 26.07.2017 18:07

Цитата:

Сообщение от Sayler91
Я наверное буду использовать innerText

Это уж вам решать, но нужно знать это.

Цитата:

Сообщение от Sayler91
Но все равно я не смог приделать ваш код.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$(function() {
    $('th:contains("Имя")').next().css('background-color', function() {
        return this.textContent.length > 4 ? '#f00' : '#fff'
    });
});
</script> 
</head>
<body>
<body>
    <table class="form-table from-table_size_sm">
<tbody>
<tr>
    <th>Имя</th><td><div class="model-value">Иван</div></td>
    <td class="form-table__gutter">&nbsp;</td><th>Имя (лат.)</th><td><div class="model-value">IVAN-ivan</div></td>
</tr>
<tr>
    <th>Фамилия</th><td><div class="model-value">Иванович</div></td>
    <td class="form-table__gutter">&nbsp;</td><th>Фамилия на лат.</th><td><div class="model-value">Ivanovich</div></td>
</tr>
</tbody>
</table>
</body>
</html>


Количество в условии и изменение на IVAN-ivan для примера. Не знаю какие проблемы, почему и что "не приделывается".

Цитата:

Сообщение от Sayler91
Подскажите тему что вы используете, а именно манипуляции с ячейкой и перевод ее в текстовую переменную?

Не понял ни о теме, ни о манипуляции перевода в переменную.

Sayler91 26.07.2017 18:21

Вроде все понял как работает, буду разбираться. Маленький вопросик: Я буду использовать скрипт, где нет внешнего интернета, по этому файл jquery.min.js не сможет использоваться. Можно ли его использовать в папке сохраненной в диске C?

j0hnik 26.07.2017 18:27

Цитата:

Сообщение от Sayler91 (Сообщение 459765)
Вроде все понял как работает, буду разбираться. Маленький вопросик: Я буду использовать скрипт, где нет внешнего интернета, по этому файл jquery.min.js не сможет использоваться. Можно ли его использовать в папке сохраненной в диске C?

Сохраняете локально
добавляйте так
<script src="путь к папке где он лежит/jquery-3.2.1.min.js"></script>

laimas 26.07.2017 18:33

Цитата:

Сообщение от Sayler91
по этому файл jquery.min.js не сможет использоваться

Можно и без jQuery данный вопрос (и не только его) решить.

Sayler91 26.07.2017 18:36

Не хотелось бы использовать сторонний файл. А так спасибо за совет.

laimas 26.07.2017 19:29

Цитата:

Сообщение от Sayler91
Не хотелось бы использовать сторонний файл.

Ну так пишите без jQuery, у объекта таблица вполне достаточно методов для получения нужных ячеек и операций с ними используя javascript.

j0hnik 26.07.2017 23:10

Цитата:

Сообщение от Sayler91 (Сообщение 459774)
Не хотелось бы использовать сторонний файл. А так спасибо за совет.

вместо <script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>

создайте тег <script></script> и скопируйте внутрь тега все содержимое файла jquery.min.js

и будет у вас все в одном файле.


Часовой пояс GMT +3, время: 08:56.