#javascript #jquery #debugging #syntax
#javascript #jquery #отладка #синтаксис
Вопрос:
Хорошо, итак, у меня есть некоторые всплывающие эффекты пузырьков с абсолютно расположенными и скрытыми дочерними элементами div.caption
. div.caption
имеет родительский элемент с именем a.logo
.
Я хочу вычесть высоту div.caption
из a.logo
и установить .css("top",..)
равную ПОЛОВИНЕ этого числа.
Например:
a.логотип = 200 пикселей (высота) div.заголовок — 250 пикселей (высота)
-( (250 — 200)/2 ) = -25
Результатом должно быть вертикальное центрирование дочернего элемента по отношению к родительскому (несмотря на то, что он переполняет родительский.
У меня есть следующий HTML
<a class="logo" href="#">
<div class="caption">Caption Text</div>
</a>
<a class="logo" href="#">
<div class="caption">Caption Text</div>
</a>
<a class="logo" href="#">
<div class="caption">Caption Text</div>
</a>
и jQuery
$("div.caption").each(function() {
var theHeight = $(this).height();
var container = $('this').closest('a.logo').height();
if( theHeight > container ) {
$(this).css("top",-( (theHeight-container)/2 ) "px");
}
});
Что действительно сбивает меня с толку, так это то, что $(this).closest('a.logo')
возвращает height();
40 пикселей, но DOM сообщает 200 пикселей для высоты элементов.
Каким-то образом мой таргетинг для переменных отключен, но мне нужно использовать .this()
, поскольку существует несколько экземпляров всех этих целей, и мне нужно установить свойство top индивидуально.
Ответ №1:
Удалите кавычки вокруг this
. В данный момент ваш код ищет элемент <this>
и находит ближайший a.logo
, которого не существует. height
устанавливается null
равным нулю в числовом контексте.
var container = $(this).closest('a.logo').height();
Комментарии:
1. Я подумал: «ВАУ, такая глупая ошибка!» но, к сожалению, это не исправляет ситуацию, по-прежнему возвращая то же значение 40 пикселей, которое кажется неправильным и вызывает сбой эффекта центрирования.
2. На самом деле, вот лучшая иллюстрация проблемы: jsfiddle.net/hvJ8M/3 … Абсурдно, я могу скопировать это непосредственно в свой рабочий код, и это не работает, хотя это работает в демонстрации JSFiddle…
3. Вы уверены, что выбираете правильные элементы в своем реальном коде? Добавьте
background:red
(или какой-то идентификатор) в свой реальный код, чтобы увидеть, какие элементы затронуты. Кроме того, какой браузер?4. Да, я знаю, что кажется, что это так, но я не могу найти ничего другого или неправильно ориентированного в моем реальном коде … хм
5. Вот полный HTML-код, скопированный с сайта: <a class=»logo» target=»_blank» href=»
wordpress.org «><div class=»всплывающее окно заголовка» style=»top: -129px; «><p>Мы ЛЮБИМ WordPress и рекомендуем его в качестве нашей CMSдля проектов любого размера. </p></div><img src=»assets/wordpress_logo.jpg » alt=»Мы ЛЮБИМ WordPress и рекомендуем его в качестве нашей CMS для проектов любого размера» title=»WordPress как CMS» class=»выровнять один размер-полный wp-image-155″></a>