You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

需为jQuery实现的视频添加cursor:pointer,求对应CSS选择器

如何为动态插入的视频iframe添加cursor:pointer样式?

我通过jQuery实现了视频海报图与延迟自动播放功能,现在需要为视频添加cursor:pointer样式。在浏览器调试工具中直接给视频元素添加该样式有效,但无法找到正确的CSS选择器。已尝试为video标签、iframe标签(CSS及jQuery中均尝试)、使用属性选择器、为父级div及其他div设置样式等,均未成功。

我的代码:

jQuery(document).ready(function($) { 
  $('.vidposter').on('click', function() { 
    var element = $(this); 
    var videoSRC = element.attr('data-videoSRC'); 
    var iframe = '<iframe width="570" height="321" src="' + videoSRC + '"></iframe>'; 
    element.html(iframe); 
  }); 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="vidposter" data-videoSRC="http://thesite.com/media/video.mp4" autoplay="true">
  <img src="https://placehold.it/570x321/" style="cursor:pointer">
</div>

解决方案

问题的核心在于iframe是点击后动态插入到DOM中的,如果静态CSS选择器没有精准匹配到这个动态生成的iframe,样式就不会生效。这里有两种可靠的解决办法:

1. 使用静态CSS选择器精准匹配动态iframe

点击后iframe会被插入到.vidposter父容器内,所以用父容器+iframe的组合选择器,就能确保样式作用到目标元素:

.vidposter iframe {
  cursor: pointer;
}

如果遇到样式被其他高优先级规则覆盖的情况,可以提升选择器优先级:

div.vidposter > iframe {
  cursor: pointer;
}

2. 动态生成iframe时直接嵌入样式

另一种更直接的方式是在创建iframe标签时,直接把cursor:pointer样式写进标签属性里,无需依赖外部CSS:

jQuery(document).ready(function($) { 
  $('.vidposter').on('click', function() { 
    var element = $(this); 
    var videoSRC = element.attr('data-videoSRC'); 
    // 直接为iframe添加style属性
    var iframe = '<iframe width="570" height="321" src="' + videoSRC + '" style="cursor:pointer"></iframe>'; 
    element.html(iframe); 
  }); 
});

补充说明

你之前尝试的选择器没生效,大概率是因为单独的iframe选择器优先级不够,或者被页面中其他iframe的样式覆盖了。而通过父容器限定后的选择器,能精准定位到点击后生成的目标iframe,自然就能生效了。

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

火山引擎 最新活动