如何在尚未定义的情况下在 jQuery 中使用 $(this)?
How to use $(this) in jQuery when it's not yet defined?
我有一段 jQuery 代码,我只需要显示一个 div 取决于用户是想使用视频文件还是嵌入 YouTube 视频。
对于上下文:我正在使用 ACF 块在 wordpress 中构建一个网站。我创建了一个按钮组,用户可以在 WP 仪表板中单击“YouTube 视频”或“视频文件”,基于此,将出现不同的 ACF 字段,并且基于此,不同的 html 代码是需要在前端显示视频。
现在的问题是,我已将两个 html 代码都放在 div 包装器(打开以显示视频的模块)中,但根据 WP 仪表板的选择,只有一个应该播放的视频(YouTube 嵌入或视频文件)。所以我需要隐藏另一个 div.
从技术上讲,我已经实现了这一点,但现在的问题是我希望用户可以在一个页面上多次使用此块,如果他们需要一个块包含嵌入的 YouTube 视频,另一个块包含一个视频文件,那么我目前拥有的代码将应用于这两个字段,导致 div 都被隐藏,而不仅仅是一个。
所以,我的想法是在我的 jquery 代码中使用 $(this) 仅将该代码应用于当前选择器,但我尝试的每个选项都不起作用。
这是我正在使用的代码:
HTML
<div style="display:none;opacity:0" class="video_popup_wrapper <?php the_field('bildvideo_feld_media_datei_feld_bild_youtube_video'); ?>">
<div class="video_div youtube_id">
<div class="html-embed w-embed w-iframe"><iframe class="youtube-video" width="100%" height="100%" src="https://www.youtube-nocookie.com/embed/<?php the_field('bildvideo_feld_media_datei_feld_youtube_id'); ?>?enablejsapi=1" modestbranding="0" controls="0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="">
</iframe></div>
</div>
<div class="video_div video_datei">
<div class="html-embed w-embed w-iframe"><iframe class="youtube-video" width="100%" height="100%" src="<?php the_field('bildvideo_feld_media_datei_feld_video_datei'); ?>" modestbranding="0" controls="0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="">
</iframe></div>
</div>
<a data-w-id="ccf28eaf-2e0e-5002-536f-6d47e7efb6d7" href="#" style="background-image: url(<?php echo get_theme_file_uri('images/close.png') ?>);" class="stop-video w-inline-block"></a>
</div>
Jquery:
if($('.video_popup_wrapper').hasClass("test12345")){
$(".youtube_id").css( "display", "none" );
}
if($('.video_popup_wrapper').hasClass("test1234")){
$(".video_datei").css( "display", "none" );
}
但是我现在如何更改 jquery 代码以使用 $(this) 呢?
此外,仅供参考:我使用 ACF 中的按钮组将 classes 添加到两个 divs:因此,当用户选择嵌入 Youtube 视频时,class 'test1234' 添加到 div .video_popup_wrapper 如果用户选择上传视频文件,则 class 'test12345' 添加到div.video_popup_wrapper
您不需要引用 this
来执行您需要的操作。
如您所知,父元素的 class 和运行前 PHP 代码中的动态值,您可以直接使用选择器和 hide()
它们。此选择器适用于这些 class 的多个实例。
$('.video_popup_wrapper.test12345 .youtube_id').hide();
$('.video_popup_wrapper.test1234 .video_datei').hide();
如果出于某种原因,您确实希望使用对元素的引用来实现此目的,那么您将需要一个循环和 find()
方法。请注意,下面的代码在行为上与上面的相同。
$('.vide_popup_wrapper').each((i, wrapper) => {
let $wrapper = $(wrapper);
if ($wrapper.hasClass('test12345'))
$wrapper.find('.youtube_id').hide();
if ($wrapper.hasClass('test1234'))
$wrapper.find('.video_datei').hide();
});
我有一段 jQuery 代码,我只需要显示一个 div 取决于用户是想使用视频文件还是嵌入 YouTube 视频。
对于上下文:我正在使用 ACF 块在 wordpress 中构建一个网站。我创建了一个按钮组,用户可以在 WP 仪表板中单击“YouTube 视频”或“视频文件”,基于此,将出现不同的 ACF 字段,并且基于此,不同的 html 代码是需要在前端显示视频。
现在的问题是,我已将两个 html 代码都放在 div 包装器(打开以显示视频的模块)中,但根据 WP 仪表板的选择,只有一个应该播放的视频(YouTube 嵌入或视频文件)。所以我需要隐藏另一个 div.
从技术上讲,我已经实现了这一点,但现在的问题是我希望用户可以在一个页面上多次使用此块,如果他们需要一个块包含嵌入的 YouTube 视频,另一个块包含一个视频文件,那么我目前拥有的代码将应用于这两个字段,导致 div 都被隐藏,而不仅仅是一个。
所以,我的想法是在我的 jquery 代码中使用 $(this) 仅将该代码应用于当前选择器,但我尝试的每个选项都不起作用。
这是我正在使用的代码:
HTML
<div style="display:none;opacity:0" class="video_popup_wrapper <?php the_field('bildvideo_feld_media_datei_feld_bild_youtube_video'); ?>">
<div class="video_div youtube_id">
<div class="html-embed w-embed w-iframe"><iframe class="youtube-video" width="100%" height="100%" src="https://www.youtube-nocookie.com/embed/<?php the_field('bildvideo_feld_media_datei_feld_youtube_id'); ?>?enablejsapi=1" modestbranding="0" controls="0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="">
</iframe></div>
</div>
<div class="video_div video_datei">
<div class="html-embed w-embed w-iframe"><iframe class="youtube-video" width="100%" height="100%" src="<?php the_field('bildvideo_feld_media_datei_feld_video_datei'); ?>" modestbranding="0" controls="0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="">
</iframe></div>
</div>
<a data-w-id="ccf28eaf-2e0e-5002-536f-6d47e7efb6d7" href="#" style="background-image: url(<?php echo get_theme_file_uri('images/close.png') ?>);" class="stop-video w-inline-block"></a>
</div>
Jquery:
if($('.video_popup_wrapper').hasClass("test12345")){
$(".youtube_id").css( "display", "none" );
}
if($('.video_popup_wrapper').hasClass("test1234")){
$(".video_datei").css( "display", "none" );
}
但是我现在如何更改 jquery 代码以使用 $(this) 呢?
此外,仅供参考:我使用 ACF 中的按钮组将 classes 添加到两个 divs:因此,当用户选择嵌入 Youtube 视频时,class 'test1234' 添加到 div .video_popup_wrapper 如果用户选择上传视频文件,则 class 'test12345' 添加到div.video_popup_wrapper
您不需要引用 this
来执行您需要的操作。
如您所知,父元素的 class 和运行前 PHP 代码中的动态值,您可以直接使用选择器和 hide()
它们。此选择器适用于这些 class 的多个实例。
$('.video_popup_wrapper.test12345 .youtube_id').hide();
$('.video_popup_wrapper.test1234 .video_datei').hide();
如果出于某种原因,您确实希望使用对元素的引用来实现此目的,那么您将需要一个循环和 find()
方法。请注意,下面的代码在行为上与上面的相同。
$('.vide_popup_wrapper').each((i, wrapper) => {
let $wrapper = $(wrapper);
if ($wrapper.hasClass('test12345'))
$wrapper.find('.youtube_id').hide();
if ($wrapper.hasClass('test1234'))
$wrapper.find('.video_datei').hide();
});