2011-09-16 3 views
1

javascriptがページ内のすべての内部href =#の配列を作成する方法はありますか?javascriptはページ内のすべての内部href =#のリストを作成しました

アイデアは、ページ上のすべてのアンカーへのリンクを含むドロップダウンメニューを持つことです。

+0

これを実行するには、コードライブラリをロードすることをお勧めしますか?または、あなたの質問にあなたが選んだタグを尊重しなければなりませんか? – user113716

+1

'document.links'はこのために調整されています。 –

+0

私はjqueryでの経験がゼロであるので、私はストレートjavascriptを考えていたが、再考するかもしれない。基本的に、今のところ私は必要なのは、アンカーのリストを出力するか、アラートにするか、あるいはdocument.writeなどのようにアンカーのリストを出力することだけです。それでさらに何をするべきかを知ることができます – unomyname

答えて

1

必要なブラウザのサポートによって、あなたがこれを行うことができます:

var elems = document.getElementsByTagName('a'); 

var hashes = Array.prototype.map.call(elems, function(v, i) { 
    return v.hash; 
}).filter(function(v, i, a) { return !!v && a.indexOf(v) === i; }); 

あなたはMDNが提供するシムを使用して古いブラウザのサポートを得ることができます。あなたのコメントで


、あなたはname代わりのhrefを望んでいることを指摘しました。

あなたはこれを行うことができ、より多くのブラウザサポートを自動的に提供しますが、まだindexOf()のサポートを受けたいと思うでしょう。

var elems = document.getElementsByTagName('a'); 

var names = []; 

for(var i = 0, len = elems.length; i < len; i++) { 
    if(elems[i].name && names.indexOf(elems[i].name) === -1) { 
     names.push(elems[i].name); 
    } 
} 
+0

'!! v && a.indexOf(v)==== i;'は私にとっては魔法です。なぜ、 'indexOf'チェックが失敗するのですか? – Raynos

+0

@Raynos:重複があるとき。このページでこれをコンソールにコピー/ペーストします。 :) *(またはハッシュがないときは、あなたはそれを知っていたと思います)* – user113716

+0

ありがとう、これは魅力的でした。 indexOfリファレンスもありがとう。非常に役立つので、私はすべてがie6に戻るように努力し続けています。 – unomyname

-2

jQueryのは、これはかなり簡単です:ちょうどページ上のすべての「選択」フィールドに「オプション」フラグのテキストとして「HREF」フィールドのテキストを追加し

$("a").filter(function() { 
    return $(this).attr("href")[0] == "#"; 
}).each(function() { 
    $("select").append("<option>" + $(this).attr("href") + "</option>"); 
}); 

を。明らかに、あなたのニーズに合わせて調整する必要がありますが、それはあなたを始めるはずです。

+1

'[0]'を使用して文字列の最初の文字を取得することは、IEの以前のバージョンでは機能しません。代わりに 'charAt'メソッドを使用してください。 – Guffa

+2

質問はいつjQueryに言及しましたか? – Raynos

+0

@Raynos、いつjQueryを使うことができないと言われたのですか? jQueryはJavaScriptライブラリであり、このようなタスクを簡単にするように設計されています。その質問の作成者は、それを効果的に使用する方法を学ぶためにうまくいくでしょう。 – riwalk

0

アンカーへのリンクの一覧ではなく、アンカーの一覧を表示したくありませんか? a[name],a[id]:not([href])セレクタを使用して、すべてのアンカー要素を名前またはhrefのないIDで検索します。

$('a[name],a[id]:not([href])').each(function(i,e){ 
    var name = $(e).attr('name') | $(e).attr('id'); 
    $('<option/>', { value: '#'+name, text: e.text() }).appendTo('#TheSelect'); 
}); 
+0

なぜdownvoteですか?あなたが間違っていると思われることを説明しなければ、答えを改善することはできません。 – Guffa

+0

一部の人々はjQueryを嫌いに思う...私の答えのコメントを読む... – riwalk

0

これは、必要な配列を返す非常に簡単な関数です。 jQueryの必要はありません。

function linksArray(){ 
    var links = document.getElementsByTagName("a"), linklist = []; 
    for(var i=0, len=links.length; i<len; ++i){ 
     linklist.push(links[i].attributes.getNamedItem("href").value); 
    } 
    return linklist; 
}