2012-07-30 29 views
1

我有一個關於如何在JavaScript中使用正則表達式來通過class="audioplayer"的div的每個實例,然後a)在底部添加一個下載鏈接,如果它是在臺式機上,或b )與HTML5音頻播放器更換整個事情(使用URL),如果是在iPhone,iPad的,iPod的,等等。這裏是主要的HTML:Javascript正則表達式移動設備音頻替換

<div class="audioplayer"> 
<embed src="http://www.site.com/audioplayer.swf" wmode="transparent" allowscriptaccess="never" allowfullscreen="false" scale="noscale" flashvars="sourceId=4&amp;mp3url=http://brightcove.vo.llnwd.net/pd16/media/44692000001/44692000001_1745411065001_LEOG-18.mp3&amp;autoplay=false&amp;mp3title=THE LEAGUE OF EXTREMELY ORDINARY GENTLEMEN: Conned Out&amp;color=273643" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/products/flashplayer" height="139" width="356"> 
</embed> 
</div> 

從我讀過,這個正則表達式會拉出任何和所有的網址:

/\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\"\\.,<>?\u00AB\u00BB\u201C\u201D\u2018\u2019]))/i 

這是t他最初的實體模型,我在想什麼:

jQuery(document).ready(function($) { 
    $("div.audioplayer").each(function() { 
     var regex = /\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\"\\.,<>?\u00AB\u00BB\u201C\u201D\u2018\u2019]))/i; 
      if(navigator.platform == 'iPad' || navigator.platform == 'iPhone' || navigator.platform == 'iPod') { 
       $(this).empty(); 
       $(this).append('<audio src="'+regex+'"controls>'); 
      }; 
      else(){ 
       $(this).append('<p></p><p></p><p class="audioembed">Click here to <a href="'+regex+'">Download MP3</a></p>'); 
      }; 
    }); 
}); 

但很明顯,我失去了一些關鍵步驟:

1)我只想運行無論正則表達式是內部div.audioplayer,只返回mp3url=之後的URL。

2)我明顯錯過了如何獲取返回的URL,將其放入一個變量,然後在追加部分中調用該特定變量。

任何幫助你可以給我,或者如果你能指出我在正確的方向,將不勝感激。

回答

2

你可以嘗試只讀取屬性:

jQuery(document).ready(function($) { 
    $(".audioplayer").each(function() { 
     var mp3 = $("embed", this).attr("flashvars").match(/mp3url=(.*?)(?:&|$)/)[1]; 
     if (navigator.platform == 'iPad' || navigator.platform == 'iPhone' || navigator.platform == 'iPod') { 
      $(this).empty(); 
      $(this).append('<audio src="' + mp3 + '"controls>'); 
     } else { 
      $(this).append('<p></p><p></p><p class="audioembed">Click here to <a href="' + mp3 + '">Download MP3</a></p>'); 
     } 
    }); 
}); 

演示:http://jsfiddle.net/mNJXc/

+0

哇哦,我甚至沒有想到這一點。非常感謝! – 2012-07-30 15:14:21

0

你可以和你不使用正則表達式遍歷DOM節點。您可以使用適當的選擇器直接使用jQuery或JavaScript來執行此操作。 見: http://api.jquery.com/attr/

用它來獲得「Flash變量」屬性,並做字符串處理對中檢索的URL。