jQuery发现不使用音频源

时间:2015-02-24 05:09:27

标签: javascript jquery html5-audio

我有一个Rails应用程序,在一个页面上有几个音频元素。要更改其中一个的源,我使用jQuery选择器找到audio元素,然后使用.find(“source”)来获取子源元素。出于某种原因,这不起作用。如果我有一个id =“change_me”的音频元素和一个包含的源元素,

$("#change_me").find("source") 

返回undefined。

这是一个说明问题的jsFiddle。使用来自父级的find()失败,使用选择器“#change_me source”也会失败,但是引用source元素的id的选择器会直接返回该元素。发生了什么事?

https://jsfiddle.net/jplato/3v73nqd7/

3 个答案:

答案 0 :(得分:2)

change_me中遗失id selector,因为它是id元素的audio

audio = $("#change_me");
source = $("#change_me source");

您已将选择器用作$("change_me") element selector,因此它会搜索标记名为change_me的元素,例如<change_me></change_me>

演示:Fiddle

答案 1 :(得分:1)

这是一个错字。您的代码中缺少#

$("#click_me").click(function(e) {
    audio = $("change_me");
               ^==========>  #
    source = audio.find("source").first();
    console.log(source[0]);
    source = $("change_me source");
                ^=========>  #
    console.log(source[0]);
    source = $("#change_me_source");
    console.log(source[0]);
});

答案 2 :(得分:0)

在我看来,解决此问题的最佳方法是在click事件之外声明您的source变量,这样您就不需要遍历DOM了。通过这样做,你也不应该需要一个全局变量。

JSFiddle

source = $('audio').children('source');
$("#click_me").click(function(e) {
    audio = $("change_me");
    console.log(source[0]);
    source = $("#change_me source");
    console.log(source[0]);
    source = $("#change_me_source");
    console.log(source[0]);
});