Jquery получить «это» из оператора if

Я пытаюсь получить уникальное значение из элемента с помощью 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 ?

Спасибо.

Оператор if не имеет собственного this. ваша логика ошибочна.

Kevin B 08.04.2019 22:51

Учитывайте $("p.viewedPost").each( ... )

Tyler Roper 08.04.2019 22:52

Я это понимаю, но есть ли способ получить его, чтобы сделать свое собственное «это»? Или есть другой способ решить мою проблему?

PVP Squad 08.04.2019 22:53
this в данном контексте document. попробуй $("p.viewedPost:onScreen").attr('postId')
Alex Kudryashev 08.04.2019 22:53

@AlexKudryashev Что, если $("p.viewedPost:onScreen") возвращает несколько элементов?

Tyler Roper 08.04.2019 22:53

Спасибо, $("p.viewedPost:onScreen").attr('postId') выполнил работу!

PVP Squad 08.04.2019 22:57

@PVPSquad Это не только сокращение для ответа тринкота ниже (который, как вы сказали, не будет работать), но и без each он будет работать только для первого элемента в выборе. Если у вас одновременно на экране несколько p.viewedPost, вы получите только postId первого.

Tyler Roper 08.04.2019 22:58
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
7
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы ищете .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 не поддерживает «фильтр».

PVP Squad 08.04.2019 22:54

Это пользовательский селектор — как он поддерживает .is(), но не .filter()? Если это действительно так, это должно быть упомянуто в вопросе.

Tyler Roper 08.04.2019 22:56

Смотрите дополнение к ответу.

trincot 08.04.2019 22:59

Другие вопросы по теме