Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.07.2016, 10:49
Интересующийся
Отправить личное сообщение для Ranetka Посмотреть профиль Найти все сообщения от Ranetka
 
Регистрация: 11.10.2012
Сообщений: 13

Перемещение элемента по узлам DOM-дерева
Здравствуйте! Пожалуйста, помогите разобраться вот в чем:

При загрузки страницы отображается только часть описания. Рядом ссылка Show more. При клике по Show more описание разворачивается полностью, в конце него ссылка Show less, которая сворачивает описание до исходного состояния.

Проблема в том, что я не могу сделать так, что бы при сворачивании описания ссылка возвращалась на исходную позицию. Она так и остается после списка, а нужно вернуть её в конец параграфа.

Вот код:
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.0.0.js"></script>
<meta charset=utf-8 />
<style>
.description-product .bodySpoiler {
    display: none;
}
.titleSpoiler {
    color: #2EB0E4;
    cursor: pointer;
}
</style>
<script>
$(document).on('click', '.titleSpoiler', function () {
    var spoilerText = $('.description-product .bodySpoiler');

    if (spoilerText.is(':visible')) {
        $(this).text('Show more');
    }
    else {
        $(this).text('Show less').appendTo('ul');
    }    
    spoilerText.toggle();
});
</script>
</head>
<body>
  		<div class="description-product">
			<p class="description_text">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 
			<span class="bodySpoiler">Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum..</span> <a class="titleSpoiler">Show more</a> 
			</p>
<ul class="bodySpoiler">
  <li>feature 1</li>
  <li>feature 2</li>
  <li>feature 3</li>
</ul>
</body>
</html>

http://jsbin.com/tadurorube/edit?html,css,js,output
Ответить с цитированием
  #2 (permalink)  
Старый 07.07.2016, 11:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Ranetka,
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.0.0.js"></script>
<meta charset=utf-8 />
<style>
.description-product .bodySpoiler {
    display: none;
}
.titleSpoiler {
    color: #2EB0E4;
    cursor: pointer;
}
</style>
<script>
$(document).on('click', '.titleSpoiler', function (event) {
  event.preventDefault();
  $(this).text($('.description-product .bodySpoiler').toggle().is(":hidden") ? "Show more" : "Show less");
});
</script>
</head>
<body>
  		<div class="description-product">
      <p class="description_text">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
      <span class="bodySpoiler">Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum..</span>
      </p>
<ul class="bodySpoiler">
  <li>feature 1</li>
  <li>feature 2</li>
  <li>feature 3</li>
</ul><a class="titleSpoiler">Show more</a></div>
</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 07.07.2016, 11:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Ranetka,
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.0.0.js"></script>
<meta charset=utf-8 />
<style>
.description-product .bodySpoiler {
    display: none;
}
.titleSpoiler {
    color: #2EB0E4;
    cursor: pointer;
}
</style>
<script>
$(document).on('click', '.titleSpoiler', function (event) {
  event.preventDefault();
  var hidden = $('.description-product .bodySpoiler').toggle().is(":hidden");
  $(this).text(hidden ? "Show more" : "Show less").appendTo(hidden ? ".description_text" : ".description-product");

});
</script>
</head>
<body>
  		<div class="description-product">
      <p class="description_text">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
      <span class="bodySpoiler">Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum..</span>
      <a class="titleSpoiler">Show more</a></p>
<ul class="bodySpoiler">
  <li>feature 1</li>
  <li>feature 2</li>
  <li>feature 3</li>
</ul></div>
</body>
</html>
Ответить с цитированием
  #4 (permalink)  
Старый 07.07.2016, 12:41
Интересующийся
Отправить личное сообщение для Ranetka Посмотреть профиль Найти все сообщения от Ranetka
 
Регистрация: 11.10.2012
Сообщений: 13

рони, спасибо, второе решение - то что нужно.
Но вот если таких спойлеров будет несколько на странице? Как возвращать Show more к концу 'своего' параграфа?
Ответить с цитированием
  #5 (permalink)  
Старый 07.07.2016, 16:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

открывашка 256 с перемещением кнопки
Ranetka,
255 вариантов было на на форуме ...
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.0.0.js"></script>
<meta charset=utf-8 />
<style>
.description-product .bodySpoiler {
    display: none;
}
.titleSpoiler {
    color: #2EB0E4;
    cursor: pointer;
}
</style>
<script>
$(function() {
    $(".description-product").on("click", ".titleSpoiler", function(event) {
        event.preventDefault();
        var hidden = $(".bodySpoiler", event.delegateTarget).toggle().is(":hidden");
        $(this).text(hidden ? "Show more" : "Show less")
        .appendTo(hidden ? $(".description_text", event.delegateTarget) : event.delegateTarget)
    })
});

</script>
</head>
<body>
  		<div class="description-product">
      <p class="description_text">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
      <span class="bodySpoiler">Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum..</span>
      <a class="titleSpoiler">Show more</a></p>
<ul class="bodySpoiler">
  <li>feature 1</li>
  <li>feature 2</li>
  <li>feature 3</li>
</ul></div>
<div class="description-product">
      <p class="description_text">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
      <span class="bodySpoiler">Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum..</span>
      <a class="titleSpoiler">Show more</a></p>
<ul class="bodySpoiler">
  <li>feature 1</li>
  <li>feature 2</li>
  <li>feature 3</li>
</ul></div>
</body>
</html>

Последний раз редактировалось рони, 07.07.2016 в 16:15.
Ответить с цитированием
  #6 (permalink)  
Старый 10.07.2016, 10:10
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

открывашка 256 с перемещением кнопки и текстом кнопки из data
Ranetka,
....
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.0.0.js"></script>
<meta charset=utf-8 />
<style>
.description-product .bodySpoiler {
    display: none;
}
.titleSpoiler {
    color: #2EB0E4;
    cursor: pointer;
}
</style>
<script>
$(function() {
    $(".description-product").on("click", ".titleSpoiler", function(event) {
        event.preventDefault();
        var hidden = $(".bodySpoiler", event.delegateTarget).toggle().is(":hidden");
        $(this).text($(this).data("text")[+hidden])
        .appendTo(hidden ? $(".description_text", event.delegateTarget) : event.delegateTarget)
    })
});

</script>
</head>
<body>
  		<div class="description-product">
      <p class="description_text">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
      <span class="bodySpoiler">Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum..</span>
      <a class="titleSpoiler" data-text = '["Show less","Show more"]'>Show more</a></p>
<ul class="bodySpoiler">
  <li>feature 1</li>
  <li>feature 2</li>
  <li>feature 3</li>
</ul></div>
<div class="description-product">
      <p class="description_text">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
      <span class="bodySpoiler">Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum..</span>
      <a class="titleSpoiler" data-text = '["Скрыть","Показать  всё"]'>Показать всё</a></p>
<ul class="bodySpoiler">
  <li>feature 1</li>
  <li>feature 2</li>
  <li>feature 3</li>
</ul></div>
</body>
</html>
Ответить с цитированием
  #7 (permalink)  
Старый 10.07.2016, 23:16
Интересующийся
Отправить личное сообщение для Ranetka Посмотреть профиль Найти все сообщения от Ranetka
 
Регистрация: 11.10.2012
Сообщений: 13

рони, спасибо, очень помогли
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Появление элемента в DOM aktep Элементы интерфейса 15 13.02.2016 13:17
Событие удаления элемента из DOM Danxil Events/DOM/Window 1 11.11.2013 22:54
Замена DOM элемента другим элементом MaxXxaM Events/DOM/Window 5 04.05.2013 01:24
обход дерева DOM Nickolas Events/DOM/Window 16 11.07.2012 07:31
onClick эвент для всего документа, кроме отдельно взятого элемента DOM el_erizo Events/DOM/Window 5 19.03.2010 15:09