2015-02-24 61 views
0

我有一個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

回答

2

缺少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

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]); 
}); 
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]); 
});