2011-12-21 2 views
1

Мне нужна помощь меняющийсяОбнаружение и изменение mp3 ссылки JavaScript

<a>'s with a href ending in the .mp3 extension from <a href="audioLink"></a> 

в

<embed type="application/x-shockwave-flash" flashvars="audioUrl=audioLink.mp3" src="http://www.google.com/reader/ui/3523697345-audio-player.swf" width="500" height="27" quality="best"></embed> 

с использованием JavaScript

+0

Дубликат [Обнаружение и редактирование MP3 ссылки] (http://stackoverflow.com/questions/8537224/detect-and -edit-mp3-links) Пожалуйста, прочитайте FAQ о том, как работает сайт, если вы новичок здесь. – Incognito

ответ

3

либо - JQuery

$("a").each(function(){ 
    var link = $(this).attr("href"); 
    if(~link.indexOf('.mp3')) { 
      $("<embed type='application/x-shockwave-flash' flashvars='audioUrl="+link+"' src='http://www.google.com/reader/ui/3523697345-audio-player.swf' width='500' height='27' quality='best'></embed>").insertAfter(this); 
      $(this).remove(); 
    } 

}) 

или чисто Javascript

(function(l){ 
    for(var i=l.length; i--;) 
     var link = l[i]; 
     if(~link.href.indexOf('.mp3')) { 
      var p = link.parentNode, 
       embed = document.createElement("embed"), 
       attr = { type:'application/x-shockwave-flash', 
         flashvars: 'audioUrl='+link.href, 
         src:'http://www.google.com/reader/ui/3523697345-audio-player.swf', 
         width:'500', 
         height:'27', 
         quality:'best'} 

      for(var j in attr) 
       embed[j]=attr[j] 
      p.insertBefore(embed,link); 
      p.removeChild(link); 

     } 


})(document.getElementsByTagName("a")) 
+0

Я * очень * советую использовать чистый метод javascript, пытаясь работать как на странице, содержащей десять тысяч ссылок: jquery будет разбиваться, pojs будет просто работать. Хороший ответ. – Incognito

+0

он не оптимизирован для скорости: in for loop может кэшировать переменную длины 'for (var i = 0, _l = links.length; i <_l; i ++)' Вместо этого копирование ключей из 'attr' может пройти его все атрибуты напрямую: например. 'embed.width = '500'' – abuduba

+0

Моя основная проблема заключалась в том, что вы не делали [это] (http://jsfiddle.net/aJmuF/), который блокирует/сбой. – Incognito

0

Вот пример решения:

var links = $(document.body).find('a'), embeded; 
for (var i = 0; i < links.length; i+=1) { 
    if ($(links[i]).attr('href').indexOf('.mp3') >= 0) { 
     embeded = $('<embed type="application/x-shockwave-flash" flashvars="audioUrl='+ $(links[i]).attr('href') +'" src="http://www.google.com/reader/ui/3523697345-audio-player.swf" width="500" height="27" quality="best"></embed>'); 
     embeded.insertBefore($(links[i])); 
     $(links[i]).remove(); 
    } 
} 

Вы можете увидеть его здесь: http://jsfiddle.net/4JqaA/

+0

Загрузка всей библиотеки jQuery добавляет много раздувания для этой задачи, вопрос также не требует решения jQuery. – Incognito

Смежные вопросы