需为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




