Заблокирован

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

12.02.2015, 06:20. Показов 2576. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru