Prototype1.4.0说明文档showLocalLinks例子有问题

· 2 分钟阅读 · 623 字

链接在这里:http://www.sergiopereira.com/articles/prototype.js.html#EnumeratingArrays

这个showLocalLinks例子有问题,在哪个浏览器里都显示不出结果。

javascript
{113 3045 <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="kd">function</span> <span class="nx">showLocalLinks</span><span class="p">(</span><span class="nx">paragraph</span><span class="p">){</span> </span></span><span class="line"><span class="cl"><span class="nx">paragraph</span> <span class="o">=</span> <span class="nx">$</span><span class="p">(</span><span class="nx">paragraph</span><span class="p">);</span> </span></span><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">links</span> <span class="o">=</span> <span class="nx">$A</span><span class="p">(</span><span class="nx">paragraph</span><span class="p">.</span><span class="nx">getElementsByTagName</span><span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">));</span> </span></span><span class="line"><span class="cl"><span class="c1">//find links that do not start with &#39;http&#39; </span></span></span><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">localLinks</span> <span class="o">=</span> <span class="nx">links</span><span class="p">.</span><span class="nx">findAll</span><span class="p">(</span> <span class="kd">function</span><span class="p">(</span><span class="nx">link</span><span class="p">){</span> </span></span><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">start</span> <span class="o">=</span> <span class="nx">link</span><span class="p">.</span><span class="nx">href</span><span class="p">.</span><span class="nx">substring</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">4</span><span class="p">);</span> </span></span><span class="line"><span class="cl"><span class="k">return</span> <span class="nx">start</span> <span class="o">!=</span><span class="s1">&#39;http&#39;</span><span class="p">;</span> </span></span><span class="line"><span class="cl"><span class="p">});</span> </span></span><span class="line"><span class="cl"><span class="c1">//now the link texts </span></span></span><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">texts</span> <span class="o">=</span> <span class="nx">localLinks</span><span class="p">.</span><span class="nx">pluck</span><span class="p">(</span><span class="s1">&#39;innerHTML&#39;</span><span class="p">);</span> </span></span><span class="line"><span class="cl"><span class="c1">//get them in a single string </span></span></span><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">result</span> <span class="o">=</span> <span class="nx">texts</span><span class="p">.</span><span class="nx">inspect</span><span class="p">();</span> </span></span><span class="line"><span class="cl"><span class="nx">alert</span><span class="p">(</span><span class="nx">result</span><span class="p">);</span> </span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div>}
html
{101 2531 <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">p</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;someText&#34;</span><span class="p">&gt;</span> </span></span><span class="line"><span class="cl">This <span class="p">&lt;</span><span class="nt">a</span> <span class="na">href</span><span class="o">=</span><span class="s">&#34;http://othersite.com/page.html&#34;</span><span class="p">&gt;</span>text<span class="p">&lt;/</span><span class="nt">a</span><span class="p">&gt;</span> has </span></span><span class="line"><span class="cl">a <span class="p">&lt;</span><span class="nt">a</span> <span class="na">href</span><span class="o">=</span><span class="s">&#34;#localAnchor&#34;</span><span class="p">&gt;</span>lot<span class="p">&lt;/</span><span class="nt">a</span><span class="p">&gt;</span> of </span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">a</span> <span class="na">href</span><span class="o">=</span><span class="s">&#34;#otherAnchor&#34;</span><span class="p">&gt;</span>links<span class="p">&lt;/</span><span class="nt">a</span><span class="p">&gt;</span>. Some are </span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">a</span> <span class="na">href</span><span class="o">=</span><span class="s">&#34;http://wherever.com/page.html&#34;</span><span class="p">&gt;</span>external<span class="p">&lt;/</span><span class="nt">a</span><span class="p">&gt;</span> </span></span><span class="line"><span class="cl">and some are <span class="p">&lt;</span><span class="nt">a</span> <span class="na">href</span><span class="o">=</span><span class="s">&#34;#someAnchor&#34;</span><span class="p">&gt;</span>local<span class="p">&lt;/</span><span class="nt">a</span><span class="p">&gt;</span> </span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">p</span><span class="p">&gt;</span> </span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">input</span> <span class="na">type</span><span class="o">=</span><span class="s">button</span> <span class="na">value</span><span class="o">=</span><span class="s">&#34;Find Local Links&#34;</span> <span class="na">onclick</span><span class="o">=</span><span class="s">&#34;showLocalLinks(&#39;someText&#39;)&#34;</span><span class="p">&gt;</span></span></span></code></pre></div>}

这个例子的意思应该是取出段落里面的本地链接,原理是链接开头不是http的就算,但是段落里面使用的#链接形式,无论在IE还是firefox里,都会被解释为带有http的形式,所以这个例子的结果永远都是空。

解决方法是把其中#开头的链接改为"javascript:;",就可以看到效果了。

后话,也有可能是因为我用Apache调试的原因,#xxx全被解释为"http://localhost/#xxx"了。

Technorati : Prototype, javascript

不够智能的网志