Javascript 单击函数影响jquery中具有相同类名的多个元素
我想在我的视频风格页面上自动播放youtube视频,即。我可以用下面给定的代码点击我的图像缩略图来自动播放视频。但是,这会影响页面中具有相同类的其他元素。我的代码是:Javascript 单击函数影响jquery中具有相同类名的多个元素,javascript,jquery,onclick,Javascript,Jquery,Onclick,我想在我的视频风格页面上自动播放youtube视频,即。我可以用下面给定的代码点击我的图像缩略图来自动播放视频。但是,这会影响页面中具有相同类的其他元素。我的代码是: jQuery( function($) { $('.cq-expandgrid-toggle').on('click', function(ev) { $("#pvideo")[0].src += "&autoplay=1"; ev.preventDefault(); }); }); &l
jQuery( function($) {
$('.cq-expandgrid-toggle').on('click', function(ev) {
$("#pvideo")[0].src += "&autoplay=1";
ev.preventDefault();
});
});
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>
我怎样才能做到呢。我对“这个”对象有点困惑 我使用了一些伪代码来测试它
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>
HTML
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>
这是小提琴
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>
所以你应该把代码改成
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>
jQuery( function($) {
$('.cq-expandgrid-toggle').on('click', function(ev) {
var pvideo = this.querySelector("#pvideo");
pvideo.src += "&autoplay=1";
ev.preventDefault();
});
});
我不确定是否有更好的方法来编写这个this.querySelector(“#pvideo”)
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>
更新:
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>
现在我对您的HTML代码有了一个大致的了解,
我尝试了下面的代码,这里有一些修改,你应该做你的HTML代码,使事情更容易
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>
- 确保
cq expandgrid toggle
和cq expandgrid content
位于父容器内。这将帮助我们将每个预览视为单个组件。对于示例代码,我使用了
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>
将cq expandgrid content
设置为hidden=“true”
,以便默认情况下iframe不可见
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>
让预览缩略图负责设置iframe的url,这样可以在显示/隐藏iframe时轻松播放/停止视频。还要确保在src的末尾添加autoplay=1
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>
HTML
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>
这是工作小提琴我认为您可以使用eq(index)
选择类名为.cq expandgrid toggle的第一个节点
。而且,id
选择器在一个页面中是唯一的,因此不需要为其添加[0]。对不起我的英语,我希望你能理解我的意思
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>
jQuery(function($) {
$('.cq-expandgrid-toggle').eq(0).on('click', function(ev) {
$("#pvideo").src += "&autoplay=1";
ev.preventDefault();
});
});
您需要将jQuery选择器的范围限制为单击的div标记内的元素
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>
这应该行得通
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>
jQuery('.cq-expandgrid-toggle').click(function(ev) {
jQuery(this).parent().find("iframe")[0].src += "&autoplay=1";
ev.preventDefault();
});
更新
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>
当用户在播放第一个视频时单击第二个视频时,第一个视频也开始与第二个视频一起播放,因为第一个视频也具有autoplay=1
。在将autoplay=1
添加到第二个iframe之前,需要重置第一个iframe的url
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>
var url = jQuery('#YourIFrameID').attr('src').replace('&autoplay=1', '');
jQuery('#YourIFrameID').setAttribute('src', '');
jQuery('#YourIFrameID').setAttribute('src', url);
您还将每个iframe的id设置为pvideo
,这是错误的HTML,因为id应该是唯一的
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>
如果你问我你实现这个视频库的方式是完全错误的。
有很多问题
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>
您正在加载页面加载上的所有iFrame。您应该使用在缩略图单击时加载播放器
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>
在页面加载上加载所有iframe需要很多时间。大多数用户不会播放您的所有视频
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>
另外,当附加autoplay=1
时,iframe会再次加载,因此加载页面是一种浪费
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>
YouTube API还为您提供了停止和启动视频的方法。因此,点击缩略图,您可以停止当前视频,加载新视频并播放。我建议您也发布问题中查询的HTML,而不是外部链接到它,同时在代码片段中发布HTML/Javascript。这就是$('.cq expandgrid toggle')
的作用。它选择所有匹配的元素,因此所有元素都与该类匹配。如果您只想针对一个特定的元素(或更特定的一组元素),您需要一个更特定的选择器。我认为使用这个
可以解决您的问题。实际上,我使用的是#pvideo作为iframe id-
,当单击“cq expandgrid toggle”时应该会打开它。保存youtube视频的容器是cq expandgrid内容,单击cq expandgrid切换时打开。所以这可能是另一个。@user2983808我更新了我的答案,以使用您给我的新信息。下次请在提问时提供示例HTML代码。Downvoter,请发表评论,以便在我尝试查找(“iframe”)和查找(“pvideo”)时更正我的错误。这两种因素都是相互影响的。pvideo是我在嵌入式iframe中使用的id。
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
<div class="cq-expandgrid-toggle">
<span id="pvideo">
Click me
</span>
</div>
</body>
</html>