You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jQuery为每个video标签更新对应子div的poster属性值

问题

需求:为每个.video_block下的video标签,利用其同级的.posterURL元素的data-poster属性值,更新video的poster属性。

原jQuery代码:

$(document(){
    $('.video_block .posterURL').each(function() {
        var poster = $(this).data("poster")
        $(.video_block video).attr('poster', poster);
    })
})

原HTML结构:

<div class="container">
    <div class="media_block">

        <div class="video_block">
            <video
            controls
            src="https://archive.org/download/BigBuckBunny_124/Content/big_buck_bunny_720p_surround.mp4"
            width="620">
            </video>

            <div class="posterURL" data-poster="https://peach.blender.org/wp-content/uploads/title_anouncement.jpg?x11217"></div>
        </div>

        <div class="video_block">
            <video
            controls
            src="https://archive.org/download/BigBuckBunny_124/Content/big_buck_bunny_720p_surround.mp4"
            width="620">
            </video>

            <div class="posterURL" data-poster="https://peach.blender.org/wp-content/uploads/title_anouncement.jpg?x11217"></div>
        </div>

        <div class="video_block">
            <video
            controls
            src="https://archive.org/download/BigBuckBunny_124/Content/big_buck_bunny_720p_surround.mp4"
            width="620">
            </video>

            <div class="posterURL" data-poster="https://peach.blender.org/wp-content/uploads/title_anouncement.jpg?x11217"></div>
        </div>
    </div>
</div>
问题分析与修正建议

原代码存在几个关键问题:

  • 文档就绪函数语法错误:$(document(){是错误写法,正确的文档就绪函数应为$(document).ready(function(){,或更常用的简写$(function(){。
  • 选择器错误:$(.video_block video)缺少引号包裹,正确写法是$('.video_block video');更重要的是,这个选择器会选中所有.video_block下的video元素,导致每次循环都会把所有video的poster覆盖为当前遍历的.posterURL值,最终所有video都会被设置成最后一个.posterURL的data-poster值。应精准定位到当前.posterURL的同级video,可使用siblings('video')或prev('video')实现。
  • 语法不严谨:变量声明后缺少分号,虽JavaScript允许自动分号插入,但手动添加分号是更规范的编码习惯。
修正后的代码

基础修正版

$(function(){
    $('.video_block .posterURL').each(function() {
        var poster = $(this).data("poster");
        // 选择当前.posterURL的同级video元素
        $(this).siblings('video').attr('poster', poster);
    });
})

更高效的遍历方式

直接遍历.video_block元素,在每个块内查找对应节点,减少DOM查询次数:

$(function(){
    $('.video_block').each(function() {
        var $block = $(this);
        var poster = $block.find('.posterURL').data('poster');
        $block.find('video').attr('poster', poster);
    });
})

简写链式写法

逻辑简单时,可用更简洁的链式调用:

$(function(){
    $('.video_block').each(function() {
        $(this).find('video').attr('poster', $(this).find('.posterURL').data('poster'));
    });
})

内容的提问来源于stack exchange,提问作者Anand Rajagopal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 12:15:07