#jquery #each
#jquery #каждый
Вопрос:
У меня есть список пользователей / веб-сайтов, и у каждого из них есть баннер. Я хочу показать этот баннер с помощью всплывающей подсказки.
$(document).ready(function() {
$(".test").each(function(i) {
var banner_url = $("input[name='banner_url']").val();
var index = i 1;
$(this).tipTip({maxWidth: "auto", edgeOffset: 10, content: banner_url index});
});
});
Но он всегда показывает один и тот же баннер в каждой всплывающей подсказке
( index
var существует только для тестирования each
, и это работает, но banner_url
нет)
Я также пытался поместить URL-адрес баннера var раньше .test each()
, но с теми же результатами. Кто-нибудь знает, в чем дело? Я уверен, что что-то пропустил.
<div class="banner">
<input type="hidden" name="banner_url" value="{$banner_url}" />
<a href="{$url}" onclick="out('{$username}');" id="{$username}" class="test" title="">{$title}</a>
</div>
Пытался также поместить эти 2 в контейнер div, но, похоже, это ничего не меняет
Я могу поместить код баннера в атрибут title, но я хочу избежать необходимости жестко кодировать img
в теге title.
Спасибо за любые советы, помогите. Seb
Комментарии:
1. Не могли бы вы также показать структуру HTML? Я предполагаю, что контейнер имеет класс «test», а внутри находится один вход с именем «banner_url»?
2. Теперь это там. возникли проблемы с dome.
3. Я уже исправил это, чтобы удалить теги кода — вы должны сделать отступ в своем коде на 4 пробела вместо использования тегов кода.
Ответ №1:
Не видя всего HTML, я предполагаю, что вы хотите, чтобы banner_url находился внутри каждого контейнера .test, поэтому:
$(".test").each(function(i, element_with_class_test) {
var banner_url = $(element_with_class_test).find("input[name='banner_url']").val();
...
});
В противном случае вы всегда ищете первый ввод с этим именем, начиная с корня документа, и, конечно, всегда будете получать одно и то же значение.
Комментарии:
1. Я бы даже рекомендовал использовать
$(.test).each(function(i,e){ var url = $(e).prev('input[name="banner_url"]') ... });
, поскольку привязка не является контейнером, а является корнем поиска.2. Брэд в вашем примере $ (.test).each(функция (i,e){ var url = $ (e).prev(‘ввод [name=»banner_url»]’) … }); что такое i и e
Ответ №2:
Я подозреваю, что проблема связана с вашим использованием:
$("input[name='banner_url']")
Вызов jQuery с этим селектором ограничен документом, а не элементом, который вы получаете с помощью each().
В вашем html тег с URL-адресом находится на том же уровне в DOM, что и ваш элемент, поэтому вам нужно использовать соответствующую функцию поиска jQuery, чтобы найти его. Это должно сработать:
var banner_url = $(this).prevUntil("input[name='banner_url']").last().val();
Комментарии:
1. При этом, похоже, отображается только баннер второго .banner div. ( см. Обновленный html)