jQuery找不到音频源

问题描述:

我有一个Rails应用程序在单个页面上有几个音频元素。要更改其中之一的源代码,我使用jQuery选择器定位音频元素,然后使用.find(“source”)来获取子元素源元素。出于某种原因,这是行不通的。如果我有包含id =“change_me”的音频元素并包含源元素,则返回undefined。jQuery找不到音频源

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

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

+0

是HTML一样摆弄? – EternalHour 2015-02-24 05:16:41

缺少change_meid selector,因为它是audio元件的id

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

您已经使用了选择作为$("change_me")这是element selector所以它会搜索与标签名称change_me元素像<change_me></change_me>

演示:Fiddle

+0

谢谢,漫漫长夜,我闷闷不乐的选择。但是,它仍然不在我的js.erb文件中,选择器是正确的。 – 2015-02-24 05:15:57

+0

@JPlato你可以在小提琴 – 2015-02-24 05:17:22

+0

Arun中重现问题,谢谢你的帮助。我从一个控制器更新方法返回时使用js.erb模板来修改我的页面的内容,但出于某种原因,我无法让它更改源元素的src属性(尝试使用attr('src' ,'...')和src ='...'最后,我放弃了,只是决定替换音频元素所在的整个div并且工作。 – 2015-02-25 06:15:59

它是一个错字。在你的代码中缺少#

$("#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]); 
}); 

在我看来,最好的办法来解决这个问题,就是声明你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]); 
});