我有一个Rails应用程序,在一个页面上有几个音频元素。要更改其中一个的源,我使用jQuery选择器找到audio元素,然后使用.find(“source”)来获取子源元素。出于某种原因,这不起作用。如果我有一个id =“change_me”的音频元素和一个包含的源元素,
$("#change_me").find("source")
返回undefined。
这是一个说明问题的jsFiddle。使用来自父级的find()失败,使用选择器“#change_me source”也会失败,但是引用source元素的id的选择器会直接返回该元素。发生了什么事?
答案 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了。通过这样做,你也不应该需要一个全局变量。
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]);
});