С Новым годом! Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Заблокирован

Спойлер для ячейки таблицы

12.02.2015, 06:20. Показов 2562. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Прошу помощи в создании скрипта для спойлера. В сети конечно полно готовых решений, но они имеют несколько другой функционал, или я просто не правильно ищу. А переделать под себя не могу, ибо знание синтаксиса JS на нуле. Собственно тема создана в надежде на готовый код, если найдутся люди со свободным временем.

Имею стандартную таблицу, с текстом в ячейках:
Кликните здесь для просмотра всего текста

HTML5
1
2
3
4
5
6
7
8
9
10
11
<table>
    <tr>
        <td>Очень длинный текст №1 бла бла бла бла бла бла бла</td>
    </tr>
    <tr>
        <td>Текст приемлемой длины</td>
    </tr>
    <tr>
        <td>Очень длинный текст №2 бла бла бла бла бла бла бла тра та та та та та та</td>
    </tr>
</table>

Текст разный по длине. Хочется сделать аккуратно. Приблизительно как на скрине:


Cам HTML сформировать могу как угодно.
HTML5
1
2
3
4
5
<!--могу так вариант №1-->
<td><p class="spoiler_button">+</p><p class="spoiler_text">Полная версия</p></td>
<!--могу так  вариант №2-->
<td><p class="spoiler_button">+</p><p class="spoiler_text_small">Обрезанная версия</p><p class="spoiler_text">Полная версия</p></td>
<!--Или как предложите-->
Помогите со JS-скриптом плиз. Он должен уметь:
Определять количество символов внутри параграфа. И либо обрезать их в закрытом состоянии либо подставлять текст из второго подготовленного параграфа, ну или ваш вариант.
Сам спойлер должен уметь открываться и закрываться желательно плавно.
Миниатюры
Спойлер для ячейки таблицы  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.02.2015, 06:20
Ответы с готовыми решениями:

Изменение ячейки таблицы на текстовое поле с содержанием ячейки при клике на неё
Доброго времени суток! Подскажите, как реализовать? Есть некая таблица, в которой хранятся 7 значений. Как сделать так, чтобы при...

Уникальный номер ячейки таблицы. Задачка не для всех :)
Всем привет! Задача - JQ скрипт должен пройти по произвольной двумерной HTML таблице, назначив каждому TD 2 класса - номер по порядку...

Сгруппировать ячейки для сводной таблицы
Добрый день форумчане! Подскажите как изменить код VBA For i1 = 685 To UBound(arr) On Error Resume Next If...

6
 Аватар для arcmag
347 / 322 / 203
Регистрация: 27.06.2014
Сообщений: 762
12.02.2015, 12:31
Лучший ответ Сообщение было отмечено Trukl как решение

Решение

Ну вот попробуйте так (правда я дивами верстал а не табличкой )

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Документ без названия</title>
<style>
*{padding:0px; margin:0px; box-sizing:border-box; -moz-box-sizing:border-box;}
.myTab{margin:10px;border:solid 1px #999999;width:400px;}
.myTab .row{border-bottom:solid 1px #999999;overflow:hidden;transition: all .5s;}
.myTab .row:hover{box-shadow:inset 0px 0px 15px black,0px 0px 15px black;}
.myTab .row .coll{padding:5px;padding-left:30px;position:relative;}
.box_p, .box_m{
    padding:0px 4px;
    border:solid 1px #999999;
    display:inline-block;
    position:absolute;
    top:5px;
    color:white;
    left:5px;
    border-radius:5px;
    cursor:pointer;
    transition:all .5s;
    background:#06F;
}
.box_m{ background:#F90; box-shadow:inset 0px 0px 5px black;}
.box_p:hover, .box_m:hover{box-shadow:inset 0px 0px 5px black,0px 0px 5px black;}
</style>
<script>
var cells;
window.onload = function(){
rows=document.getElementsByClassName("myTab").item(0).getElementsByClassName("row");
cells=document.getElementsByClassName("myTab").item(0).getElementsByClassName("coll");
my_tab();
}
function my_tab(){
    for(var i=0; i<rows.length; i++){
        if(cells.item(i).offsetHeight>50){
            rows.item(i).style.height = 50+"px";
            var bk = document.createElement("div");
            bk.classList.add("box_p");
            bk.textContent = "+";
            bk.addEventListener("click",al);
            cells.item(i).appendChild(bk);
        }
    }
}
function al(){
    if(this.classList.contains("box_p")){
        this.classList.remove("box_p"); this.classList.add("box_m");
        this.textContent = "-";
        this.parentNode.parentNode.style.height = this.parentNode.offsetHeight+"px";
        console.log(this.parentNode.offsetHeight);
    }
    else{
        this.classList.remove("box_m"); this.classList.add("box_p");
        this.textContent = "+";
        this.parentNode.parentNode.style.height = 50+"px";
        console.log(this.parentNode.offsetHeight);
    }
}
</script>
</head>
<body>
<div class='myTab'>
    <div class="row">
        <div class="coll">Очень длинный текст №1 бла бла бла бла бла бла блf</div>
    </div>
    <div class="row">
        <div class="coll">
Текст приемлемой длины Очень длинный текст №2 бла бла бла бла бла бла бла тра та та та та та та Очень длинный текст №2 бла бла бла бла бла бла бла тра та та та та та та Текст приемлемой длины Очень длинный текст №2 бла бла бла бла бла бла бла тра та та та та та та Очень длинный текст №2 бла бла бла бла бла бла бла тра та та та та
        </div>
    </div>
    <div class="row">
        <div class="coll">
Текст приемлемой длины Очень длинный текст №2 бла бла бла бла бла бла бла тра та та та та та та Очень длинный текст №2 бла бла бла бла бла бла бла тра та та та та та та Текст приемлемой длины Очень длинный текст №2 бла бла бла бла бла бла бла тра та та та та та та Очень длинный текст №2 бла бла бла бла бла бла бла тра та та та таТекст приемлемой длины Очень длинный текст №2 бла бла бла бла бла бла бла тра та та та та та та Очень длинный текст №2 бла бла бла бла бла бла бла тра та та та та та та Текст приемлемой длины Очень длинный текст №2 бла бла бла бла бла бла бла тра та та та та та та Очень длинный текст №2 бла бла бла бла бла бла бла тра та та та таТекст приемлемой длины Очень длинный текст №2 бла бла бла бла бла бла бла тра та та та та та та Очень длинный текст
        </div>
    </div>
</div>
</body>
</html>
1
Заблокирован
12.02.2015, 13:15  [ТС]
Спасибо. Почти то что нужно. Немного адаптировал. Посмотрите плиз не накосячил ли сильно?
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
var cells;
window.onload = function(){
rows=document.getElementsByClassName("myTab").item(0).getElementsByClassName("row");
cells=document.getElementsByClassName("myTab").item(0).getElementsByClassName("coll");
my_tab();
}
function my_tab(){
    for(var i=0; i<rows.length; i++){
        if(cells.item(i).offsetHeight>30){
            rows.item(i).style.height = 30+"px";
            var bk = document.createElement("div");
            bk.classList.add("box_p");
            bk.textContent = "+";
            bk.addEventListener("click",al);
            cells.item(i).appendChild(bk);
        }
        //-вот тут правильно исправил? не сломается чего потом?
        else{
            rows.item(i).style.height = 30;
            var bk = document.createElement("div");
            bk.classList.add("box_p");
            bk.textContent = "~";
            cells.item(i).appendChild(bk);
        }//-----
    }
}
function al(){
    if(this.classList.contains("box_p")){
        this.classList.remove("box_p"); this.classList.add("box_m");
        this.textContent = "-";
        this.parentNode.parentNode.style.height = this.parentNode.offsetHeight+"px";
        console.log(this.parentNode.offsetHeight);
    }
    else{
        this.classList.remove("box_m"); this.classList.add("box_p");
        this.textContent = "+";
        this.parentNode.parentNode.style.height = 30+"px";
        console.log(this.parentNode.offsetHeight);
    }
}
0
 Аватар для arcmag
347 / 322 / 203
Регистрация: 27.06.2014
Сообщений: 762
12.02.2015, 13:25
А что вы сделать то тут хотите? Просто добивать иконку "-" к блоку высота которого и так не превышает 1 строку?
0
Заблокирован
12.02.2015, 13:31  [ТС]
Ну да. Чтобы иконка была в любом случае и имела 3 положения
1) ~ не активное
2) + закрыто
3) - открыто
0
 Аватар для arcmag
347 / 322 / 203
Регистрация: 27.06.2014
Сообщений: 762
12.02.2015, 13:36
Ну вот так можно в принципе
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Документ без названия</title>
<style>
*{padding:0px; margin:0px; box-sizing:border-box; -moz-box-sizing:border-box;}
.myTab{margin:10px;border:solid 1px #999999;width:400px;}
.myTab .row{border-bottom:solid 1px #999999;overflow:hidden;transition: all .5s;}
.myTab .row:hover{box-shadow:inset 0px 0px 15px black,0px 0px 15px black;}
.myTab .row .coll{padding:5px;padding-left:30px;position:relative;}
.box_p, .box_m, .box_n{
    padding:0px 4px;
    border:solid 1px #999999;
    display:inline-block;
    position:absolute;
    top:5px;
    color:white;
    left:5px;
    border-radius:5px;
    cursor:pointer;
    transition:all .5s;
    background:#06F;
}
.box_m{ background:#F90; box-shadow:inset 0px 0px 5px black;}
.box_n{ background:#960;}
.box_p:hover, .box_m:hover{box-shadow:inset 0px 0px 5px black,0px 0px 5px black;}
</style>
<script>
var cells;
window.onload = function(){
rows=document.getElementsByClassName("myTab").item(0).getElementsByClassName("row");
cells=document.getElementsByClassName("myTab").item(0).getElementsByClassName("coll");
my_tab();
}
function my_tab(){
    for(var i=0; i<rows.length; i++){
        if(cells.item(i).offsetHeight>30){
            rows.item(i).style.height = 30+"px";
            var bk = document.createElement("div");
            bk.classList.add("box_p");
            bk.textContent = "+";
            bk.addEventListener("click",al);
            cells.item(i).appendChild(bk);
        }
         else{
            var bk = document.createElement("div");
            bk.classList.add("box_n");
            bk.textContent = "~";
            cells.item(i).appendChild(bk);
        }
    }
}
function al(){
    if(this.classList.contains("box_p")){
        this.classList.remove("box_p"); this.classList.add("box_m");
        this.textContent = "-";
        this.parentNode.parentNode.style.height = this.parentNode.offsetHeight+"px";
    }
    else{
        this.classList.remove("box_m"); this.classList.add("box_p");
        this.textContent = "+";
        this.parentNode.parentNode.style.height = 30+"px";
    }
}
</script>
</head>
<body>
<div class='myTab'>
    <div class="row">
        <div class="coll">Очень длинный текст №1 бла бла бла бла бла</div>
    </div>
    <div class="row">
        <div class="coll">
Текст приемлемой длины Очень длинный текст №2 бла бла бла бла бла бла бла тра та та та та та та Очень длинный текст №2
        </div>
    </div>
    <div class="row">
        <div class="coll">
Текст приемлемой длины Очень длинный текст №2 бла бла бла бла бла бла бла тра та та та та та та Очень длинный текст №2 текст
        </div>
    </div>
</div>
</body>
</html>
1
Заблокирован
12.02.2015, 13:40  [ТС]
Ясно. Значит одна строка таки лишняя.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.02.2015, 13:40
Помогаю со студенческими работами здесь

Необходимо задать границу для первой ячейки таблицы
Как сделать так, чтобы border-bottom был полный(через tr не получается), пожалуйста помогите изменить код так, чтобы полоса под кнопками...

Регулярное выражение для получения значения ячейки таблицы
Добрый день, приходит таблица. В ячейках информация. &lt;td&gt;Бренд&lt;/td&gt; &lt;td&gt;&lt;a class=&quot;margin-left-20&quot;...

Как установить на ячейки таблицы режим только для чтения?
Всем привет. Подскажите как мне установить для ячеек таблицы режим onlyread?

Изменение стандартного узора для заливки ячейки таблицы в Word
Добрый день! Подскажите есть ли возможность изменить стандартные узоры которые используются при заливке ячеек таблицы в Word?

Как узнать из какой таблицы бд сайт берет информацию для определенной ячейки, и сделать запрос к ней
здравствуйте, допустим есть образовательный портал, в нём студенты выполняют работу и отправляют преподавателю на проверку, на самом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru