Mam funkcję jQuery, która zastąpi każde hiperlink za pomocą jPlayera, używając tego hiperłącza jako źródła. Hiperlink wygląda tak w HTML:
<div>
<a href="demos/myfile.mp3" rel = "jPlayer">myfile</a>
</div>
Więc to, co mam do tej pory w moim Javascriptu to:
$(document).ready(function() {
$("a[rel="jPlayer"]").jPlayer("setMedia", { mp3: $(this).attr("href") });
});
Problem polega na tym, że nie mogę wymyślić prawicyselector, aby pobrać wartość istniejącego hiperłącza i użyć go dla źródła mp3: w kodzie. Może nawet nie używam tego prawa, a może to coś zupełnie innego, czego mi brakuje.
Kiedy uruchamiam kod w niezmienionej postaci, otrzymuję "a.attributes is null" w Firebug. Czy ktoś może pomóc rozwiązać ten problem?
Odpowiedzi:
2 dla odpowiedzi № 1Chodzi o konstrukcję skryptu:
$("a[rel="jPlayer"]").jPlayer("setMedia", { mp3: $(this).attr("href") });
Odsyłasz to do jPlayera, a nie do wybranej wartości. Powinieneś używać go w inny sposób, spróbuj tego:
$("a[rel="jPlayer"]").jPlayer("setMedia", { mp3: $("a[rel="jPlayer"]").attr("href") });
lub eaven
var anchor = $("a[rel="jPlayer"]");
anchor.jPlayer("setMedia", { mp3: anchor.attr("href") });
1 dla odpowiedzi nr 2
Może istnieć więcej niż jeden link na stronie. Aby poprawnie zainicjować każdą instancję jPlayera, możesz iterować po wszystkich linkach i zainicjować jPlayer dla każdego dopasowanego elementu.
$(document).ready(function() {
$("a[rel="jPlayer"]").each(function(index){
var link = $(this);
link.jPlayer("setMedia", { mp3: link.attr("href") });
});
});
0 dla odpowiedzi № 3
Gdyby this
nie działa w oczywisty sposób, wyciągnę selekcjonera i ponownie go użyję.
$(document).ready(function() {
var media_link = $("a[rel=jPlayer]");
media_link.jPlayer("setMedia", { mp3: media_link.attr("href") });
});
Ma to podwójny efekt tylko wzywania extend
na element kotwiący raz, a nie dwa razy. Zmieniłem nieco selektor, usuwając cudzysłowy.