2009-03-05 7 views
1

私はこのhtmlを持っています。私はこのhref属性とクラス「リンク」のリンクを非表示にするには、href属性を使用して、ちょうど最後の数字(233253)することで、これらのリンクのいずれかを非表示にすることができますどのように特定のクラスと属性を持つリンクを非表示にする

<a class="link" href="www.website.com?id=233253">test1</a> 
<a class="link" href="www.website.com?id=456456">test2</a> 

これは実用的なコードではありません。私はそれをより良く説明するために一緒にまとめたものです。 。 getElementsByTagNameの( 'A')クラス( 'リンク')のhref = "* 233253"

更新:。 は、残念ながら、それは純粋なJavaScriptのライブラリを使用していないことがあり、それはIE6で動作するように持っています。

アップデート2: 私はhtmlの

答えて

3
<html> 
<head> 
<script type="text/javascript"> 

function hideLinks(className, ids) { 
    var links = document.getElementsByTagName("a"); 
    var max = links.length; 

    for (var i=0; i<max; i++) { 
     var link = new RegExp("(\s*)"+ className +"(\s*)"); 
     var isLink = link.test(links[i].className); 

     if (isLink) { 
      for (var j=0; j<ids.length; j++) { 
       var regexp = new RegExp(ids[j] + "$"); 
       var hasId = regexp.test(links[i].href); 

       if (hasId) { 
        links[i].style.display = "none"; 
       } 
      } 
     } 
    } 
} 

window.onload = function() { 
    hideLinks("link", [233253]); 
} 
</script> 
</head> 
<body> 

<a class="link" href="www.website.com?id=233253">test1</a> 
<a class="link" href="www.website.com?id=456456">test2</a> 


</body> 
</html> 

編集:私は、関数の内部機能をカプセル化についてのあなたのコメントを読んだ後、新しいバージョンを掲載。これは、以前のバージョンと同様に動作します。

+0

ありがとう;)このコードをもっとコンパクトにする方法はありますか?可能な限り短くする必要がありますが、可読性は重要ではありません。 –

+0

確かにこれを自分で行うことができます:空白を削除して変数名を短縮してください。 –

+0

変数から数値を入力する方法がわかりません。私はそれから関数を作成しようとしているので、再利用することができますが、数値を保持する変数を置く方法や方法はあまりよく分かりません。/233253 $ /どんな考えですか? –

4

へのアクセスを持っていない[編集]:コードがややずさんだった、今で動作するはずです。 splitメソッドを含める(コメントを参照)。

エレメントをループし、hrefをチェックして隠れを適用します。 jQueryのを使用して

var refs = document.getElementsByTagName('a'); 
for (var i=0;i<refs.length;i++) { 
     if (
      refs[i].href && 
      refs[i].href.replace(/(\d+$)/,'$1').match('[your value to match]') 
     ) { 
      refs[i].className = refs[i].className.replace(/link/i,''); 
      refs[i].style.display = 'none'; 
     } 
} 

OR

for (var i=0;i<refs.length;i++) { 
    var hs = refs[i].href.split(/=/)[1]; 
    if ( hs.match([your value to match])) { 
     refs[i].className = refs[i].className.replace(/link/i,''); 
     refs[i].style.display = 'none'; 
    } 
} 
+0

また、href(refs [i] .href.split(/ = /))を分割し、結果の配列の要素1を条件と比較することもできます。 – KooiInc

+0

それは良い解決策ですか?あなたのコードをどうすればいいですか? –

+0

スクリプトが動作しなくなりました。私はFirebugでこのエラーが発生します。 Firebugのログ制限に達しました。 %Sエントリは表示されません。 \t \t環境設定\t がありません。 forループ初期化子の後に [このエラーでブレーク] for(var i = 0、i

4

:このよう

$("a.link[href$='233253']").hide(); 

$ =属性セレクタは、選択した属性が指定された値で終わるすべての要素にマッチします。

+0

ありがとう、私は本当にjQueryを使用したいと思いますが、私はこれにアクセスする必要はありません。 –

1

嫌なことはありませんが、ループを作成することは回避策のようです。リンクに一意のIDを追加することができれば、これは明らかに推奨される方法です。

その後、 'getElementById'を使用して、特定のリンクを非表示にする別のクラスを設定することができます。

+0

またはCSSルールを設定して、JSを完全に廃止します。 #link233253 {display:none} – nickf

+0

残念ながら私はhtmlにアクセスできません... –

-1

どのようなリンクを別のリンクから区別していますか?サーバー側では、適切なクラス名を追加し、静的な方法でCSSから隠すことになります。

隠す必要があるものを動的に判断するには、HTML内でレンダリングしない限り、javascriptスニペットを動的に生成する必要があります。

更新:生成されたHTMLにアクセスできない場合は、私の投稿は役に立ちません。