<?xml version="1.0" encoding="utf-8" standalone="yes"?><?xml-stylesheet type="text/css" href="https://imnerd.org/css/rss.css"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Js on 怡红院落</title><link>https://imnerd.org/tags/js.html</link><description>Recent content in Js on 怡红院落</description><language>zh-CN</language><copyright>© 2021</copyright><lastBuildDate>Sat, 22 Dec 2012 21:40:00 +0800</lastBuildDate><atom:link href="https://imnerd.org/tags/js/index.xml" rel="self" type="application/rss+xml"/><item><title>自建虾米音乐搜索</title><link>https://imnerd.org/xiami-search-diy.html</link><pubDate>2012-09-22</pubDate><guid>https://imnerd.org/xiami-search-diy.html</guid><description>预览 预览地址：虾米音乐搜索 主要目的是搜索音乐并获取播放器代码
原理 本段代码主要利用了http://www.xiami.com/app/nineteen/search/key/搜索内容/page/搜索结果页数虾米这个隐藏的API，例如http://www.xiami.com/app/nineteen/search/key/传奇/page/1可以获取到搜索结果总数已经相关歌曲的信息等。
简单的思路是搜索框输入搜索信息点击搜索AJAX载入API搜索结果并返回给页面解析显示，单击一条歌曲时根据搜索结果获得的歌曲ID返回播放器代码。
代码分析 首先是基本的HTML代码
&amp;lt;input type=&amp;#34;text&amp;#34; id=&amp;#34;text&amp;#34; value=&amp;#34;&amp;#34; /&amp;gt; &amp;lt;input type=&amp;#34;hidden&amp;#34; id=&amp;#34;page&amp;#34; value=&amp;#34;1&amp;#34; /&amp;gt; &amp;lt;!--隐藏的input用来存放页面数--&amp;gt; &amp;lt;button&amp;gt;搜索&amp;lt;/button&amp;gt; &amp;lt;!--#result用来显示歌曲列表 | #navi增加载入更多特效 | #show用来显示播放器代码--&amp;gt; &amp;lt;div id=&amp;#34;list&amp;#34;&amp;gt; &amp;lt;div id=&amp;#34;result&amp;#34;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div id=&amp;#34;navi&amp;#34;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;div id=&amp;#34;show&amp;#34;&amp;gt;&amp;lt;/div&amp;gt; 加载jQuery库文件
&amp;lt;script type=&amp;#34;text/javascript&amp;#34; src=&amp;#34;http://lib.sinaapp.com/js/jquery/1.8.3/jquery.min.js&amp;#34;&amp;gt;&amp;lt;/script&amp;gt; 添加获取搜索结果的异步事件，增加搜索框回车快捷获取结果效果。第7行用于清除播放器代码显示结果，以防是得到播放器显示结果后重新搜索。第10行用于当搜索结果时不加载载入更多代码。
function search() { $.ajax({ url: &amp;#34;http://www.xiami.com/app/nineteen/search/key/&amp;#34;+$(&amp;#39;#text&amp;#39;).val()+&amp;#34;/page/&amp;#34;+$(&amp;#39;#page&amp;#39;).val(), type: &amp;#34;get&amp;#34;, dataType: &amp;#34;jsonp&amp;#34;, success: function(data, status) { $(&amp;#39;#show&amp;#39;).html(&amp;#39;&amp;#39;); $(&amp;#34;#list&amp;#34;).css(&amp;#39;display&amp;#39;,&amp;#39;block&amp;#39;); if(data.total / 8 != 1) { $(&amp;#39;#navi&amp;#39;).html(&amp;#39;&amp;lt;center&amp;gt;载入更多&amp;lt;/center&amp;gt;&amp;#39;); } $.each(data.results, function(i,item){ $(&amp;#39;&amp;lt;p onclick=&amp;#34;show(\&amp;#39;&amp;#39;+item.song_id+&amp;#39;\&amp;#39;);&amp;#34;&amp;gt;&amp;#39;+decodeURIComponent(item.song_name)+&amp;#39; - &amp;#39;+decodeURIComponent(item.artist_name)+&amp;#39;&amp;lt;/p&amp;gt;&amp;#39;).appendTo(&amp;#39;#result&amp;#39;); }); }, error: function() { alert(&amp;#39;failed!&amp;#39;); } }); } //当点击搜索按钮时先清除结果显示防止是重新搜索，然后再一步加载搜索结果 $(&amp;#39;button&amp;#39;).click(function(){ $(&amp;#34;#result&amp;#34;).html(&amp;#39;&amp;#39;); search(); }); //搜索框回车时触发搜索按钮点击事件 $(&amp;#34;body&amp;#34;).keydown(function() { if (event.keyCode == &amp;#34;13&amp;#34;) { $(&amp;#39;button&amp;#39;).click(); } }); 增加点击歌曲名获取歌曲播放器代码事件，先是在页面中显示播放器，再用一个textarea框显示引用代码，并增加了当textarea框获得焦点时自动全选框内代码效果。
function show(id) { //搜索结束搜索起始页面自动返回到1 $(&amp;#39;#page&amp;#39;).val(&amp;#39;1&amp;#39;); $(&amp;#39;#list&amp;#39;).css(&amp;#39;display&amp;#39;, &amp;#39;none&amp;#39;); var html = &amp;#39;&amp;lt;embed src=&amp;#34;http://www.xiami.com/widget/0_&amp;#39;+id+&amp;#39;/singlePlayer.swf&amp;#34; type=&amp;#34;application/x-shockwave-flash&amp;#34; width=&amp;#34;257&amp;#34; height=&amp;#34;33&amp;#34; wmode=&amp;#34;transparent&amp;#34;&amp;gt;&amp;lt;/embed&amp;gt;&amp;#39;; $(&amp;#34;#show&amp;#34;).html(html); $(&amp;#34;#show&amp;#34;).append(&amp;#39;&amp;lt;textarea onfocus=&amp;#34;this.select();&amp;#34; onmouseover=&amp;#34;this.focus()&amp;#34;&amp;gt;&amp;#39;+html+&amp;#39;&amp;lt;/textarea&amp;gt;&amp;#39;); }</description></item></channel></rss>