如何将 Same Jquery 应用于随时间推移通过 CMS 添加的具有唯一 ID 的元素?
How to Apply Same Jquery to Elements with Unique IDs Added Through CMS Over Time?
我正在构建一个当前包含一些视频的页面,并且随着时间的推移将通过我们的 CMS (Craft) 添加更多视频。每个视频的容器 div 将有一个唯一的 ID,如下所示:
<div id="video-1"></div>
<div id="video-2"></div>
<div id="video-3"></div>
每次点击 div 之一,我都想 运行 一些 Jquery。它是相同的基础 Jquery,但我希望它仅 运行 用于点击的唯一视频,因此它应该与 ID 相关联。
挑战在于 - 我不想每次添加视频时都必须转到我们的 javascript 文件并手动将新选择器添加到 运行 函数。我希望 Jquery 适用于通过 CMS 添加的每个新视频,而无需任何额外步骤。假设每个视频的 ID 都会随着新视频的添加而增加。
这是我正在使用的 Jquery 的示例:
$('#video-1').on('click', function() {
$('#video-1').css('background', 'none');
$('#video-1').css('display', 'block');
$('#video-1').css('position', 'static');
$('iframe').css('display', 'block').attr('src', function() {
return edTalksAutoPlay();
});
});
如何/有没有办法实现我想要做的事情?谢谢!
当jQuery 调用事件处理程序时,它安排this
绑定到涉及的DOM 元素。因此,事件处理程序中的 $(this)
将始终为您提供与事件相关的元素的 jQuery 对象。
$('[id^=video]').on('click', function() {
$(this).css('background', 'none');
$(this).css('display', 'block');
$(this).css('position', 'static');
$(this).css('display', 'block').prop('src', function() {
return edTalksAutoPlay();
});
});
实现此目的的最简单方法是将元素组合在一起。您可以通过向它们添加 class 或通过父元素选择它们来做到这一点,例如。 #parent > div
.
从那里您可以使用 this
关键字来引用在处理程序中引发事件的元素。我还强烈建议您使用预定义的 CSS classes 来设置元素的样式并使用 addClass()
/toggleClass()
来修改它们。像这样:
$('.video').on('click', function() {
$(this).toggleClass('active').prop('src', function() {
return edTalksAutoPlay();
});
});
.active {
background: none;
display: block;
position: static;
}
<div id="video-1" class="video"></div>
<div id="video-2" class="video"></div>
<div id="video-3" class="video"></div>
最后,请注意 div
元素没有 src
属性 - 尽管我认为这只是在简化问题中的 HTML 时的疏忽。
我正在构建一个当前包含一些视频的页面,并且随着时间的推移将通过我们的 CMS (Craft) 添加更多视频。每个视频的容器 div 将有一个唯一的 ID,如下所示:
<div id="video-1"></div>
<div id="video-2"></div>
<div id="video-3"></div>
每次点击 div 之一,我都想 运行 一些 Jquery。它是相同的基础 Jquery,但我希望它仅 运行 用于点击的唯一视频,因此它应该与 ID 相关联。
挑战在于 - 我不想每次添加视频时都必须转到我们的 javascript 文件并手动将新选择器添加到 运行 函数。我希望 Jquery 适用于通过 CMS 添加的每个新视频,而无需任何额外步骤。假设每个视频的 ID 都会随着新视频的添加而增加。
这是我正在使用的 Jquery 的示例:
$('#video-1').on('click', function() {
$('#video-1').css('background', 'none');
$('#video-1').css('display', 'block');
$('#video-1').css('position', 'static');
$('iframe').css('display', 'block').attr('src', function() {
return edTalksAutoPlay();
});
});
如何/有没有办法实现我想要做的事情?谢谢!
当jQuery 调用事件处理程序时,它安排this
绑定到涉及的DOM 元素。因此,事件处理程序中的 $(this)
将始终为您提供与事件相关的元素的 jQuery 对象。
$('[id^=video]').on('click', function() {
$(this).css('background', 'none');
$(this).css('display', 'block');
$(this).css('position', 'static');
$(this).css('display', 'block').prop('src', function() {
return edTalksAutoPlay();
});
});
实现此目的的最简单方法是将元素组合在一起。您可以通过向它们添加 class 或通过父元素选择它们来做到这一点,例如。 #parent > div
.
从那里您可以使用 this
关键字来引用在处理程序中引发事件的元素。我还强烈建议您使用预定义的 CSS classes 来设置元素的样式并使用 addClass()
/toggleClass()
来修改它们。像这样:
$('.video').on('click', function() {
$(this).toggleClass('active').prop('src', function() {
return edTalksAutoPlay();
});
});
.active {
background: none;
display: block;
position: static;
}
<div id="video-1" class="video"></div>
<div id="video-2" class="video"></div>
<div id="video-3" class="video"></div>
最后,请注意 div
元素没有 src
属性 - 尽管我认为这只是在简化问题中的 HTML 时的疏忽。