0

我使用.each()and在每个类元素之前before()自动插入一个带有类的音频元素以'pipe1'实现悬停效果,'product_name'因为单个音频元素不能重叠自身,因此每个按钮都需要自己的声音效果。

我知道插入有效,因为当我检查页面时,我看到了元素。直接访问时播放的元素,但现在使用.closest()它不起作用。任何帮助是极大的赞赏。

以下是我使用 Firefox 的“检查元素”生成的 HTML:

<audio class="pipe1">
  <source src="/frontshift/audio/pipe1.mp3"></source>
  <source src="/frontshift/audio/pipe1.ogg"></source>
</audio>
<span class="product_name">Product</span>

我正在使用的所有代码都在相同的 .hover 效果中激活,即$(".product_name").hover()

以下代码成功播放音频:

$(".pipe1")[0].currentTime = .04;
$(".pipe1")[0].play();

以下代码不会:

$(this).closest(".pipe1").currentTime = .04;
$(this).closest(".pipe1").play();

以下警报出现未定义:

alert($(this).closest(".pipe1").attr("class"));
4

3 回答 3

5

.closest()选择祖先,选择以前的兄弟使用.prev()

var audio = $(this).prev(".pipe1")[0];
audio.currentTime = .04;
audio.play();
于 2013-04-13T17:35:02.097 回答
0

您需要从 jQueryObject 获取 DOM 节点:

$(this).closest(".pipe1").get(0).currentTime = 0.4

或使用类似数组的行为:

$(this).closest(".pipe1")[0].currentTime = 0.4

您确定上下文 ( this) 是指音频标签内的元素吗?

于 2013-04-13T17:35:14.573 回答
0

是的,你应该使用$(this).prev('.pipe1');

于 2013-04-13T17:36:17.233 回答