Сохраняйте исходную высоту в Jquery mouseover

#jquery

#jquery

Вопрос:

У меня есть простой список, и когда я переворачиваю селектор li, я хочу найти исходную высоту тега p внутри этой области переноса, которая имеет класс subtext. Я хочу где-нибудь сохранить это значение, чтобы я мог использовать его в методе развертывания. есть ли способ сохранить его в этой области. Если я использую глобальную переменную, она может быть изменена другой областью ролловера до того, как предыдущая сможет ее использовать.

Я также хочу знать, как я могу получить правильную высоту текста селекторов height. var pheight = $(это, «p.подтекст»).height(); приведенный выше код считывает текст не на всю высоту. Кажется, он считывает высоту тега li, который в css имеет значение height:50px;

 li{
width: 100px;
height: 50px;
float: left;
color: #191919;
text-align: center;
overflow: hidden;
list-style-type: none;
  

}

HTML-КОД

 <body>
<ul>
    <li class="green">
        <div ></div>
        <p><a href="#">Home</a></p>
        <p class="subtext">The front page has more text than any other panel. I want the script to revel different height text.</p>
    </li>
    <li class="yellow">
        <p><a href="#">About</a></p>
        <p class="subtext">More info</p>
    </li>
    <li class="red">
        <p><a href="#">Contact</a></p>
        <p class="subtext">Get in touch</p>
    </li>
    <li class="blue">
        <p><a href="#">Submit</a></p>
        <p class="subtext">Send us your stuff!</p>
    </li>
    <li class="purple">
        <p><a href="#">Terms</a></p>
        <p class="subtext">Legal stuff</p>
    </li>
</ul>
  

 $("document").ready(function(){

$("li").mouseover(function(){
    var pheight = $(this, "p.subtext").height();
    console.log(pheight);
    $(this).stop().animate({height:150}, {duration: 600, easing: "easeOutExpo"} );
})

$("li").mouseout(function(){
    $(this).stop().animate({height:50}, {duration: 600, easing: "easeOutExpo"} );
})
  

})

Ответ №1:

Во-первых, вам нужно использовать селектор наоборот — $('p.subtext', this) . Более очевидно, использовать find :

 var pheight = $(this).find('p.subtext').height();
  

Затем вы можете сохранить данные о самом элементе с помощью data :

 $(this).data('pheight', pheight);
  

Вы можете восстановить ее в mouseout функции с помощью data снова:

 $(this).stop().animate({height: $(this).data('pheight')}, {duration: 600, easing: "easeOutExpo"} );
  

Комментарии:

1. Спасибо lonesomeday, на сайте Jquery есть пример, подобный этому jQuery.data(document.body, ‘foo’, 52); Элементом является document . тело «foo» — это ключ, а 52 — это значение. Чего я не получаю в приведенном выше примере, так это значения ключа «foo», хранящегося в элементе body или в самом Jquery DOM. В вашем примере: $(this).data(‘pheight’, pheight); значение ключа с именем «pheight» сохраняется в элементе in scope (this) p.subtext. Верно ли это в моем предположении. Если да, то, может быть, вы можете объяснить, почему сайт Jquery использует дополнительный параметр под названием element?

2. @Chapsterj Существует два метода: $(selection).data и $.data . Сначала выполняется выделение jQuery, затем к нему привязываются данные. Второй вариант привязывает данные только к одному элементу, немного менее читаемым способом. Следующие действия идентичны по эффекту: $(this).data('foo', 'bar') и $.data(this, 'foo', 'bar') . Я использовал более читаемую версию выше (и ссылался на нее), хотя $.data она немного быстрее.

Ответ №2:

Функция data() jQuery позволяет сохранять произвольные данные, связанные с указанным элементом. Возвращает значение, которое было установлено.