Я пытаюсь получить уникальное значение из элемента с помощью jquery, это значение должно отображаться, когда я прокручиваю до определенного места на экране. Когда элемент отображается на экране, postId 15 должен достичь кода jquery.
Это мой код:
$(document).scroll(function() {
if ($("p.viewedPost").is(':onScreen')) {
var postId = $(this).attr("postId");
console.info("Element appeared on Screen " + postId);
}
else {
console.info("Element not on Screen");
//do all your stuffs here when element is not visible.
}
});
Проблема в том, что у меня несколько postId, поэтому я не могу использовать $("p.viewedPost").attr("postId");
Это должно быть $(this).attr("postId");
Но когда я использую «это», postId кажется неопределенным. Итак, как я могу заставить $("p.viewedPost").is(':onScreen')
иметь this
?
Спасибо.
Учитывайте $("p.viewedPost").each( ... )
Я это понимаю, но есть ли способ получить его, чтобы сделать свое собственное «это»? Или есть другой способ решить мою проблему?
this
в данном контексте document
. попробуй $("p.viewedPost:onScreen").attr('postId')
@AlexKudryashev Что, если $("p.viewedPost:onScreen")
возвращает несколько элементов?
Спасибо, $("p.viewedPost:onScreen").attr('postId')
выполнил работу!
@PVPSquad Это не только сокращение для ответа тринкота ниже (который, как вы сказали, не будет работать), но и без each
он будет работать только для первого элемента в выборе. Если у вас одновременно на экране несколько p.viewedPost
, вы получите только postId
первого.
Вы ищете .filter()
и .each()
:
$("p.viewedPost").filter(':onScreen').each(function () {
var postId = $(this).attr("postId");
console.info("Element appeared on Screen " + postId);
});
Если селектор :onScreen
вашего плагина не работает с .filter
, вы можете поместить тест внутри обратного вызова each
:
$("p.viewedPost").each(function () {
if (!$(this).is(':onScreen')) return; // skip
var postId = $(this).attr("postId");
console.info("Element appeared on Screen " + postId);
});
Это не сработает, поскольку :onScreen не поддерживает «фильтр».
Это пользовательский селектор — как он поддерживает .is()
, но не .filter()
? Если это действительно так, это должно быть упомянуто в вопросе.
Смотрите дополнение к ответу.
Оператор if не имеет собственного
this
. ваша логика ошибочна.