2009-03-05 8 views
1

Ich habe dieses HTML.Verstecken Sie einen Link mit einer bestimmten Klasse und Attribut

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

Wie kann ich mich verstecken einen dieser Links durch das href-Attribut, und nur die letzten Zahlen (233.253), die Verbindung mit diesem Attribut href und der Klasse „link“ zu verbergen?

Dies ist kein funktionierender Code, nur etwas, das ich zusammengelegt habe, um es besser zu erklären. . getElementsByTagName ('a') Klasse ('link') href = "* 233253"

Update:. Leider hat es reine Javascript sein, nicht eine Bibliothek, und es hat auf IE6 zu arbeiten.

Update2: Ich habe keinen Zugriff auf den HTML-Code

Antwort

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> 

bearbeiten: Ich stellte eine neue Version nach dem Kommentar über Einkapseln der Funktionalität innerhalb einer Funktion zu lesen. Dieser sollte genauso gut funktionieren wie die vorherige Version.

+0

Danke;) Gibt es eine Möglichkeit, diesen Code kompakter zu machen? Es muss so kurz wie möglich sein, Lesbarkeit ist nicht wichtig. –

+0

Sicher können Sie das selbst tun: Entfernen Sie einfach Leerzeichen und verkürzen Sie Variablennamen. –

+0

Ich kann nicht herausfinden, wie man die Nummer von einer Variablen eingibt. Ich versuche, eine Funktion daraus zu erstellen, damit ich sie wiederverwenden kann, aber ich weiß nicht genau wie und wo ich die Variable setzen soll, die die Nummer enthält./233253 $/Irgendwelche Gedanken? –

4

[bearbeiten]: Code war etwas schlampig, sollte jetzt funktionieren. Einschließlich der Split-Methode (siehe Kommentare).

Schleife durch die a-Elemente, überprüfen Sie href und wenden Sie das Verstecken an. Wie folgt aus:

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'; 
     } 
} 

ODER

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

Sie können auch die href (refs [i] .href.split (/ = /)) teilen und Element 1 des resultierenden Arrays nehmen, um es mit Ihrer Bedingung zu vergleichen. – KooiInc

+0

Ist das eine bessere Lösung? Wie würde ich das mit deinem Code machen? –

+0

Ich konnte Ihr Skript nicht funktionieren lassen. Ich erhalte diesen Fehler in Firebug. Firebugs Log-Limit wurde erreicht. % S Einträge werden nicht angezeigt. \t \t Einstellungen \t fehlt; nach For-Loop Initialisierer [Break auf diesen Fehler] für (var i = 0, i

4

Mit jQuery:

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

Die $ = Attributselektor passt auf alle Elemente, bei denen das ausgewählte Attribut mit dem angegebenen Wert endet.

+0

Danke, ich würde gerne jQuery verwenden, aber ich habe keinen Zugriff darauf, wo dies verwendet wird. –

1

Nichts für ungut, aber das Erstellen von Schleifen scheint mir ein Workaround zu sein. Wenn Sie den Links eindeutige IDs hinzufügen könnten, wäre dies natürlich die bevorzugte Methode.

Danach können Sie 'getElementById' verwenden, um eine andere Klasse zum Ausblenden der bestimmten Verknüpfung festzulegen.

+0

oder einfach nur CSS Regeln einstellen und JS ganz weglassen. # link233253 {display: none} – nickf

+0

Leider habe ich keinen Zugriff auf den HTML-Code ... –

-1

Was unterscheidet einen Link von einem anderen? Wenn Sie wissen, dass auf der Server-Seite, fügen Sie entsprechende Klassennamen hinzu und die auf statische Weise aus dem CSS versteckt werden.

Wenn Sie dynamisch bestimmen, was ausgeblendet werden muss, müssen Sie Ihr JavaScript-Snippet dynamisch generieren, es sei denn, Sie rendern dies im HTML-Code.

Update: Wenn Sie keinen Zugriff auf das generierte HTML haben, dann hilft Ihnen mein Beitrag nicht.